私たちはpython2.7を排他的に使用していますが、今日、python 2.7を使用するすべての仮想環境でsite.pyが、python2.7で追加された多くの新機能を欠いているpy2.6のsite.pyを使用していることを発見したのは驚きです。
何がうまくいかないかの例を挙げていただけますか?
site.getsitepackages()は機能しません。
OS Xで再現:
$ virtualenv -p python2.7 ve
$ ./ve/bin/python -c 'import site; print(getattr(site, "getsitepackages"))'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
venvの外で実行することは私のために働きます-
`` `
$ python -c 'import site; print(getattr(site, "getsitepackages"))'
<function getsitepackages at 0x104198410>
`` `` ``
$ ./ve/bin/python -c 'インポートサイト; print(site .file ) '
/private/tmp/ve/lib/python2.7/site.pyc
$ python -c 'インポートサイト; print(site .file ) '/ System / Library / Frameworks / Python.framework / Versions / 2.7 / lib / python2.7 / site.pyc
We ship our own `./virtualenv_embedded/site.py`
site.pyを更新する(そして後方互換性を確保する)ことを検討してください
これをリリースブロッカーとしてマークするべきではないと思います。 機能互換のsite.pyファイルをサポートするのは素晴らしいことですが、この欠点は何年もの間このようになっています。
「この欠点は何年もの間このようなものでした」。 そして、ええ、それはまだ痛いです... :(
このplz、thxを修正することを検討してください
これは今日私を噛みました。 古い2.6バージョンにはsite.getusersitepackages()
のようなものがないので、更新されたsite.py
をvirtualenv
$に含めるのは本当に本当に素晴らしいことです。
それも私を噛みました、そしてそれは私を不意を突かれた。 今、私は他のファイルがシステムpythonとどのように違うのか(特に--system-site-packages
を使用している場合)、そして他にどのような「バグ」が待っているのか疑問に思っています…
Python2.7.6でvirtualenv13.1.2を使用しても引き続き有効であり、私が行っている開発作業の邪魔になっています。
インタラクティブなフィドルは次のとおりです。
$ virtualenv --version
13.1.2
$ virtualenv test
New python executable in test/bin/python
Installing setuptools, pip, wheel...done.
$ source test/bin/activate
$ which python
/home/user/test/bin/python
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
False
>>> site.getsitepackages()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>>
$ deactivate
$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> 'getsitepackages' in dir(site)
True
>>> site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
>>>
編集:すごい......私はちょうど読んだ: https ://github.com/pypa/virtualenv/pull/697
この特定の症状よりも、根本的な原因に対処するために時間を費やしたほうがよいと思います。 リライトがどのように行われるかに応じて、リライトで説明されている変更を優先して、この問題を解決するために発生する必要のある変更を待つことをいとわない。
元のコメント:
私もこれに噛まれました。
# Tried with and without --system-site-packages
[username@hostname] ~/dir $ virtualenv --system-site-packages venv
Using base prefix '/usr'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip, wheel...done.
[username@hostname] ~/dir $ venv/bin/python
Python 3.4.3 (default, Jul 28 2015, 18:20:59)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site.getsitepackages()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
>>>
site.py
を更新して$ site.getsitepackages()
$を提供することを検討してください
#555でこの問題を解決してください。非推奨の警告が原因で、-Werrorを指定して実行すると、仮想環境で異なる動作が発生する可能性があります。 toxは内部で機能するためにこのパッケージに依存しているので、それを回避する方法はあまり見られません。
+ 1sad_pandaとたくさんの涙
+1今日は私を噛み締めてください。コードはvirtualenvの外部では機能しますが、内部では機能しません。
+1バイト、アップデートはありますか? ありがとう。
rk(jupyterのリモートカーネル)で同じ問題を+1します。
+1バイト、virtualenvの外部では機能しますが、内部では機能しません。
結局のところ、当面の最善の解決策は、プロジェクトでsite.py
(またはその一部)をベンダー化することかもしれないと思います。
回避策として: python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
は、Pythonサイトの場所を見つけることができます-パッケージディレクトリ
+1
+1バイト、アップデートはありますか? ありがとう。
Ubuntu 16.0464ビットでvirtualenv15.0.1を使用しています
+1バイト
(CentOS7.5.1804上のvirtualenv15.1.0)
py3に移行して以来、私はvirtualenv
の使用をやめ、Python独自のvenv
を使用しています。 Python 3.6以降では、ミニマリストのvenv
は2つのシンボリックリンクで構成されています。
$ python3.6 -m venv --without-pip grut
$ tree grut/
grut/
├── bin
│ ├── activate
│ ├── activate.csh
│ ├── activate.fish
│ ├── python -> python3.6
│ ├── python3 -> python3.6
│ └── python3.6 -> /usr/bin/python3.6
├── include
├── lib
│ └── python3.6
│ └── site-packages
├── lib64 -> lib
└── pyvenv.cfg
6 directories, 7 files
だから、これ以上virtualenv
とそのすべての癖はありません。 HTH他の人々。
@RemiCardona私はPython3のvenv
を可能な限り使用していますが、残念ながらtox
は(Python 3をテストしている場合でも) virtualenv
を使用しているため、この問題が発生します。 tox
を使用してテストを自動化したり、継続的インテグレーションを行ったりするたびに。 😞
この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 開いたままにしておきたい場合は、コメントを追加してください。 貢献していただきありがとうございます。
最も参考になるコメント
回避策として:
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
は、Pythonサイトの場所を見つけることができます-パッケージディレクトリ