フォルダーを作成し、その中のvirtualenvインスタンスを初期化しました。
$ mkdir myproject
$ cd myproject
$ virtualenv env
(env)$ pip freeze
を実行すると、インストールされているパッケージが表示されます。
ここで、myproject/
の名前をproject/
に変更します。
$ mv myproject/ project/
しかし、今実行すると
$ . env/bin/activate
(env)$ pip freeze
pipがインストールされていないと表示されます。環境を壊さずにプロジェクトフォルダーの名前を変更するにはどうすればよいですか?
相対パスを使用するには、インストールを調整する必要があります。 virtualenv
は、--relocatable
オプションでこれを提供します。 ドキュメント から:
通常、環境は特定のパスに関連付けられています。つまり、環境を移動したり、別のコンピューターにコピーしたりすることはできません。次のコマンドを使用して、環境を修正して再配置可能にすることができます。
$ virtualenv --relocatable ENV
注:ENVは仮想環境の名前であり、ENVディレクトリの外部から実行する必要があります。
これにより、setuptoolsまたは配布によって作成されたファイルの一部が相対パスを使用するようになり、Pythonインタープリターの場所を使用して環境を選択する代わりにactivate_this.pyを使用するようにすべてのスクリプトが変更されます。
注:パッケージを環境にインストールした後、これを実行する必要があります。環境を再配置可能にしてから新しいパッケージをインストールする場合、virtualenv --relocatableを再度実行する必要があります。
「理由を知る」ことは「方法を知る」ことよりも重要。そこで、これを修正する別のアプローチを紹介します。
. env/bin/activate
を実行すると、実際には次のコマンドが実行されます(たとえば、/tmp
を使用):
VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV
ただし、myproject
の名前をproject
に変更したため、そのコマンドは実行できませんでした。システムグローバル環境にpip
をインストールしておらず、virtualenv pip
のソースが正しくないため、pip is not installed
と表示されるのはこのためです。
これを手動で修正したい場合、これが方法です:
Vimのようなお気に入りのエディターで、通常42行目の/tmp/project/env/bin/activate
を変更します。
VIRTUAL_ENV='/tmp/myproject/env'
=> VIRTUAL_ENV='/tmp/project/env'
1行目の/tmp/project/env/bin/pip
を変更します。
#!/tmp/myproject/env/bin/python
=> #!/tmp/project/env/bin/python
その後、仮想環境env
を再度アクティブにすると、pip
が再び戻ってきます。
注: As @jb。このソリューションは、簡単に(再)作成されたvirtualenv
sにのみ適用されることを指摘しています。環境のインストールに数時間かかる場合、このソリューションはお勧めしません
Virtualenvは、作成と切り替えが簡単なので素晴らしいです。単一の構成にロックされるのを防ぎます。プロジェクトの要件がわかっている場合、または取得できる場合は、新しいvirtualenv
:
requirements.txt
ファイルを作成します
(env)$ pip freeze > requirements.txt
requirements.txt
ファイルを作成できない場合は、元のenv
を削除する前にenv/lib/pythonX.X/site-packages
を確認してください。既存の(env)
を削除します
deactivate && rm -rf env
新しいvirtualenv
を作成してアクティブ化し、要件をインストールします
virtualenv env && . env/bin/activate && pip install -r requirements.txt
または、virtualenvwrapperを使用して、すべてのvirtualenvが一元化された場所に保持されるため、少し簡単になります
$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv
私は常に手伝うためにvirtualenvwrapperをインストールしています。シェルプロンプトから:
pip install virtualenvwrapper
Virtualenvwrapperドキュメントに文書化された方法があります- cpvirtualenv これはあなたがすることです。環境から出て、シェルプロンプトに戻ることを確認します。必要な名前でこれを入力してください:
cpvirtualenv oldenv newenv
そして、必要に応じて:
rmvirtualenv oldenv
Newenvに移動するには:
workon newenv
次の手順に従って問題を修正できます。
$ virtualenv ..\path\renamed_directory
$ scripts/activate
$ pip freeze
は、パッケージが適切に配置されていることを確認しますそれを行う別の方法は、問題なく何度も私のために働いた virtualenv-clone :
pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env
(プロジェクトフォルダー内)
cd bin
sed -i 's/old_dir_name/new_dir_name/g' *
無効化と有効化を忘れないでください
virtualenv --relocatable ENV
は望ましい解決策ではありません。ほとんどの人は、長期的な副作用なしにvirtualenvの名前を変更する機能を求めています。
そのため、私はそれを行う簡単なツールを作成しました。 virtualenv-mv のプロジェクトページでは、もう少し詳しく説明していますが、基本的にmv
の単純な実装を使用するのと同じようにvirtualenv-mv
を使用できます(なしオプション)。
例:
virtualenv-mv myproject project
ただし、これをハックしただけです。異常な状況(例:シンボリックリンクされたvirtualenv)で破損する可能性があるため、注意して(失うことができないものをバックアップして)問題が発生した場合はお知らせください。