Ubuntu 10.04を使用して、Pythonバイナリまたはsetuptoolsで生成されたスクリプトを直接呼び出すと、-relocatableが機能します。 ただし、bin / activateは引き続き古いパスを反映しています。
> pwd
/home/jhammel
> virtualenv.py foo
New python executable in foo/bin/python
Installing setuptools............done.
> virtualenv.py --relocatable foo
Making script foo/bin/easy_install relative
Making script foo/bin/easy_install-2.6 relative
Making script foo/bin/pip relative
> mv foo bar
> cd bar
> . bin/activate
(foo)> echo $VIRTUAL_ENV
/home/jhammel/foo
(foo)> which python
/usr/bin/python
(foo)>
これは、スクリプトでVIRTUAL_ENVが絶対パスに設定されているためです。 代わりに、これは--relocatableが呼び出されたときに相対的にする必要があります。
アクティブ化スクリプトはソースである必要があるため、パスを取得するのは(たとえば) dirname $0
よりも少し複雑です。 以下はbashで機能するようです:
command=$(history 1) # this should go at the top of the file
parent_path() {
DIRECTORY=$(dirname ${!#})
cd $DIRECTORY/..
pwd
}
VIRTUAL_ENV=$(parent_path $command)
これがあなたの承認に合うなら、イアン、私はパッチを書いてうれしいです。
フォーマットが悪いのでごめんなさい.... bitbucketはまた私をだましました:(
Original Comment By: Jeff Hammel
また、Windows環境で%~dp0%
を使用して、
現在のスクリプト、つまり、activate.bat用。
Original Comment By: Sylvain Prat
私はそれが良い考えだと思います、パッチは素晴らしいでしょう。
Original Comment By: Jannis Leidel
Original Comment By: Jannis Leidel
これがbashのより良いバージョンです:
VIRTUAL_ENV=$(cd $(dirname "$BASH_SOURCE"); dirname `pwd`)
そして(t)cshの場合:
set sourced=($_)
set scriptdir=`dirname "$sourced[2]"`
set scriptpwd=`cd "$scriptdir"; pwd`
setenv VIRTUAL_ENV `dirname "$scriptpwd"`
Original Comment By: Anonymous
これは私が使用しているものです:
VIRTUAL_ENV="$(dirname $(dirname $(readlink --canonicalize --no-newline
$ BASH_SOURCE))) "
または短いオプションで
VIRTUAL_ENV="$(dirname $(dirname $(readlink -f -n $BASH_SOURCE)))"
Original Comment By: Matteo Bertini
そして、まだtcshを使用している人のためのオプション:
set sourced =($ _)
scriptdir = dirname "$sourced[2]"
set scriptpwd = cd "$scriptdir"; pwd
setenv VIRTUAL_ENV dirname "$scriptpwd"
この変更のプルリクエストを行いました(bashスクリプトのみを実装します)。
https://github.com/pypa/virtualenv/pull/143
Windowsの場合、ACTIVATE_BATで次を置き換えることができます。
set VIRTUAL_ENV=__VIRTUAL_ENV__
と:
pushd %~dp0..
set VIRTUAL_ENV=%CD%
popd
これは、変更なしの場合と同じ絶対パスになるという点で、直接%~dp0..
設定するよりも優れていますが、再配置可能です。
これに関連する最新の問題#1067への参照を追加して、アクティベーションスクリプトを使用してこの50年前の問題を解決するための取り組みを統合するのに役立てます。
これは私が使用しているものです:
VIRTUAL_ENV="$(dirname $(dirname $(readlink --canonicalize --no-newline
$ BASH_SOURCE))) "
または短いオプションで
VIRTUAL_ENV="$(dirname $(dirname $(readlink -f -n $BASH_SOURCE)))"
readlink
使用すると、Linux、BSD / macOS、および場合によっては他のUnixフレーバー間でコマンドラインオプションが異なるため、問題が発生する可能性があります。
@ adah1972 、第1067号が最新のものです。 この号は2012年のもので、#1067は2017年のものです。
@arizvisaありがとう。 #1067にもコメントしました。
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 開いたままにしておきたい場合は、コメントを追加してください。 貢献していただきありがとうございます。