--system-site-packages
の有無にかかわらず、virtualenvは次のようになります。
% python -c 'import site; site.getsitepackages()'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: 'module' object has no attribute 'getsitepackages'
はい、virtualenvの実装の醜い側面の1つは、サイトモジュールの独自のコピーが必要なことです。これは、Pythonのバージョンに関係なく、すべてのvirtualenvで使用されます。 そして、このコピーはsite.getsitepackages()
の追加よりも前のものです(Python 2.7で最初に追加されたと思います)。
実装がvirtualenvでサポートされているすべてのバージョンのPython(2.4から3.3a)で機能するものである限り、その関数をvirtualenvのサイトモジュールに追加するプルリクエストに異論はありません。 または、以前のPythonバージョンの他の領域にAPIがないためにそれが難しすぎる場合は、 sys.version
などに応じて条件付きで定義してください。
重複#355
より一般的であるため、#355に複製として閉じます。
Python3.6.5でこの問題が発生します
>> python --version && python -c "import site; print(site.getsitepackages())"
Python 3.6.5
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module 'site' has no attribute 'getsitepackages'
#355の複製ではありません
最も参考になるコメント
はい、virtualenvの実装の醜い側面の1つは、サイトモジュールの独自のコピーが必要なことです。これは、Pythonのバージョンに関係なく、すべてのvirtualenvで使用されます。 そして、このコピーは
site.getsitepackages()
の追加よりも前のものです(Python 2.7で最初に追加されたと思います)。実装がvirtualenvでサポートされているすべてのバージョンのPython(2.4から3.3a)で機能するものである限り、その関数をvirtualenvのサイトモジュールに追加するプルリクエストに異論はありません。 または、以前のPythonバージョンの他の領域にAPIがないためにそれが難しすぎる場合は、
sys.version
などに応じて条件付きで定義してください。