ですから、もう一度、私は素敵なpythonプログラムを作成します。これは私の人生をより簡単にし、多くの時間を節約します。もちろん、これはmkvirtualenv
プロジェクトには、virtualenvwrapperの機能があります。プロジェクトには、いくつかの必要なライブラリ(requires:D)を含むrequirements.txtファイルがあり、これらのライブラリなしではプログラムは実行されません。
私のパスにある_bin/run-app
_実行可能シェルスクリプトを追加しようとしています(実際にはシンボリックリンク)。さて、このスクリプト内で、このプログラムを実行する前にvirtualenvに切り替える必要があります。だから私はこれを
_#!/bin/bash
# cd into the project directory
workon "$(cat .venv)"
python main.py
_
ファイル_.venv
_には、virtualenv名が含まれています。しかし、このスクリプトを実行すると、_workon: command not found
_エラーが発生します。
もちろん、bashrcでvirtualenvwrapper.shを入手していますが、このシェルスクリプトでは使用できないようです。
ここで、これらのvirtualenvwrapper関数にアクセスするにはどうすればよいですか?それとも私はこれを間違った方法でやっていますか? pythonツールを起動するにはどうすればよいですか。各ツールは独自のvirtualenv !?
virtualenvwrapper.sh
スクリプトでvirtualenvwrapperの関数をインポートします。これで、スクリプトでworkon
関数を使用できるようになります。
おそらく、シェルスクリプトを作成することもできます(名前はvenv-run.sh
たとえば)任意のPythonスクリプトを特定のvirtualenvで実行し、/usr/bin
、/usr/local/bin
、またはPATH
にあるディレクトリ。
このようなスクリプトは次のようになります。
#!/bin/sh
# if virtualenvwrapper.sh is in your PATH (i.e. installed with pip)
source `which virtualenvwrapper.sh`
#source /path/to/virtualenvwrapper.sh # if it's not in your PATH
workon $1
python $2
deactivate
そして、単にvenv-run.sh my_virtualenv /path/to/script.py
シェルでvirtualenvwrapper
のコマンドをトリガーする方法が見つかりません。しかし、このトリックは役立ちます:環境を想定してください。名前はmyenv
で、スクリプトの先頭に次の行を追加します。
ENV=myenv
source $WORKON_HOME/$ENV/bin/activate
既知の問題 です。回避策として、スクリプトのコンテンツを関数にして、~/.bashrc
または~/.profile
function run-app() {
workon "$(cat .venv)"
python main.py
}
Pythonスクリプトが特定のvirtualenvを必要とする場合、virtualenvのbin
ディレクトリに配置/インストールします。環境外でそのスクリプトにアクセスする必要がある場合は、シンボリックリンクを作成できます。
virtualenvのbin
からのmain.py:
#!/path/to/virtualenv/bin/python
import yourmodule
if __name__=="__main__":
yourmodule.main()
PATHのシンボリックリンク:
pymain -> /path/to/virtualenv/bin/main.py
Bin/run-appで:
#!/bin/sh
# cd into the project directory
pymain arg1 arg2 ...
Virtualenvのpython実行可能ファイルを直接呼び出すこともできます。まず、実行可能ファイルへのパスを見つけます。
$ workon myenv
$ which python
/path/to/virtualenv/myenv/bin/python
次に、シェルスクリプトから呼び出します。
#!/bin/bash
/path/to/virtualenv/myenv/bin/python myscript.py
どうやら、私はこれを間違った方法でやっていた。 .envvファイルにvirtualenvの名前を保存する代わりに、virtualenvのディレクトリパスを配置する必要があります。
(cdvirtualenv && pwd) > .venv
bin/run-app
、 置いた
source "$(cat .venv)/bin/activate"
python main.py
そしてイェーイ!
これらの行を.bashrcまたは.bash_profileに追加します
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
そして端末を再度開いて試してください