web-dev-qa-db-ja.com

シェルスクリプトで使用できないvirtualenvwrapper関数

ですから、もう一度、私は素敵な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 !?

53
Shrikant Sharat

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

67
mdeous

シェルでvirtualenvwrapperのコマンドをトリガーする方法が見つかりません。しかし、このトリックは役立ちます:環境を想定してください。名前はmyenvで、スクリプトの先頭に次の行を追加します。

ENV=myenv
source $WORKON_HOME/$ENV/bin/activate
8
Coc B.

既知の問題 です。回避策として、スクリプトのコンテンツを関数にして、~/.bashrcまたは~/.profile

function run-app() {
  workon "$(cat .venv)"
  python main.py
} 
1
reubano

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 ...
0
jfs

Virtualenvのpython実行可能ファイルを直接呼び出すこともできます。まず、実行可能ファイルへのパスを見つけます。

$ workon myenv
$ which python
/path/to/virtualenv/myenv/bin/python

次に、シェルスクリプトから呼び出します。

#!/bin/bash

/path/to/virtualenv/myenv/bin/python myscript.py
0
Aaron

どうやら、私はこれを間違った方法でやっていた。 .envvファイルにvirtualenvの名前を保存する代わりに、virtualenvのディレクトリパスを配置する必要があります。

(cdvirtualenv && pwd) > .venv

bin/run-app、 置いた

source "$(cat .venv)/bin/activate"
python main.py

そしてイェーイ!

0
Shrikant Sharat

これらの行を.bashrcまたは.bash_profileに追加します

export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh

そして端末を再度開いて試してください

0
Rashi