62

それで、もう一度、私は私の人生をこれまで以上に簡単にし、多くの時間を節約する素晴らしいpythonプログラムを作ります。もちろん、これにはvirtualenvwrapperのmkvirtualenv機能で作られたvirtualenvが含まれます。プロジェクトには、いくつかの必要なライブラリ(リクエストも: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関数にアクセスするにはどうすればよいですか?それとも私はこれを間違った方法でやっていますか?それぞれが独自のvirtualenvを持っているPythonツールをどのように起動しますか?

4

8 に答える 8

79

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

于 2011-09-24T13:53:50.630 に答える
9

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

ENV=myenv
source $WORKON_HOME/$ENV/bin/activate
于 2012-08-03T08:56:51.623 に答える
2

これは非常に古いスレッドであり、同様の問題が発生しました。私は好奇心からより簡単な解決策を探し始めました。

gnome-terminal --working-directory='/home/exact/path/here' --tab --title="API" -- bash -ci "workon aaapi && python manage.py runserver 8001; exec bash;"

--workingdirectoryは、タブをデフォルトで内部で開くように強制し、-ciは、タブをインタラクティブインターフェイスのように動作させるように強制します。これにより、venvwrapperが期待どおりに機能しないという問題が回避されます。

これらをいくつでも順番に実行できます。タブを開き、エイリアスを付けて、必要なスクリプトを実行します。

個人的には、ターミナルでstartdevと入力したときにこれを行うために、エイリアスをbashrcにドロップしました。

私はこれが好きです。なぜなら、その簡単で、複製が簡単で、柔軟性があり、変数などをいじる必要がないからです。

于 2020-01-17T20:39:04.283 に答える
1

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

function run-app() {
  workon "$(cat .venv)"
  python main.py
} 
于 2015-06-09T11:40:56.703 に答える
0

Pythonスクリプトで特定のvirtualenvが必要な場合は、それをvirtualenvのbinディレクトリに配置/インストールします。環境外でそのスクリプトにアクセスする必要がある場合は、シンボリックリンクを作成できます。

virtualenvのmain.py bin

#!/path/to/virtualenv/bin/python
import yourmodule

if __name__=="__main__":
   yourmodule.main()

パス内のシンボリックリンク:

pymain -> /path/to/virtualenv/bin/main.py

bin / run-appの場合:

#!/bin/sh
# cd into the project directory
pymain arg1 arg2 ...
于 2011-09-24T12:31:23.460 に答える
0

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

(cdvirtualenv && pwd) > .venv

そして、にbin/run-app、私は入れました

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

そして、イェーイ!

于 2011-09-24T14:20:08.733 に答える
0

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

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

ターミナルを再度開いて試してください

于 2013-07-02T11:11:10.133 に答える
0

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

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

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

#!/bin/bash

/path/to/virtualenv/myenv/bin/python myscript.py
于 2013-08-17T16:06:21.623 に答える