我一直试图在我的OS X机器上运行Python 3.3的内置“venv”模块。我使用Homebrew安装了Python 3.3。
根据文档,创建和切换虚拟环境的工作方式正如您所期望的那样:
$ python3 -m venv myvenv
$ source myvenv/bin/activate
我测试过这样的事情:
$ echo "YEAH = 'YEAH!'" > myvenv/lib/python3.3/site-packages/thingy.py
$ python
>>> import thingy
>>> print(thingy.YEAH)
'YEAH!'
但是当我尝试安装分发时,它根本就不会进入正确的位置。出于某种原因,它坚持尝试安装到/usr/local/lib/python3.3/site-packages/
,但失败并显示以下消息:
No setuptools distribution found
running install
Checking .pth file support in /usr/local/lib/python3.3/site-packages/
/Users/victor/myvenv/bin/python -E -c pass
TEST FAILED: /usr/local/lib/python3.3/site-packages/ does NOT support .pth files
error: bad install directory or PYTHONPATH
You are attempting to install a package to a directory that is not
on PYTHONPATH and which Python does not read ".pth" files from. The
installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:
/usr/local/lib/python3.3/site-packages/
and your PYTHONPATH environment variable currently contains:
''
无论我是尝试使用distribute_setup.py
安装还是直接使用源代码分发,都会发生这种情况。我甚至尝试使用--prefix=/Users/victor/myenv
,但它仍然试图将所有内容都放在我的“全局”网站包中。
我无法弄清楚为什么会发生这种情况,但它在我的两台机器上都是一致的。请注意sys.prefix
报告正确的路径(虚拟环境)。
这是Homebrew的问题吗? OS X? Python 3.3? VENV?我吗?
答案 0 :(得分:3)
这是Homebrew的一个问题,是的,但是自https://github.com/mxcl/homebrew/commit/0b50110107ea2998e65011ec31ce45931b446dab以来它一直在运作。
$ brew update
$ brew rm python3 #if you have installed it before
$ brew install python3
$ cd /tmp
$ which python3
/usr/local/bin/python3
$ python3 -m venv myvenv
$ source myvenv/bin/activate
$ wget http://python-distribute.org/distribute_setup.py # may need brew install wget
$ python3 distribute_setup.py
...
Finished processing dependencies for distribute==0.6.45
After install bootstrap.
Creating /private/tmp/myvenv/lib/python3.3/site-packages/setuptools-0.6c11-py3.3.egg-info
Creating /private/tmp/myvenv/lib/python3.3/site-packages/setuptools.pth
您看到将安装成功分发到/ tmp目录。
答案 1 :(得分:1)
这是因为homebrew
安装了distutils配置文件:
$ brew cat python3 | grep "Tell distutils" -A5
# Tell distutils-based installers where to put scripts
(prefix/"Frameworks/Python.framework/Versions/#{VER}/lib/python#{VER}/distutils/distutils.cfg").write <<-EOF.undent
[install]
install-scripts=#{scripts_folder}
install-lib=#{site_packages}
EOF
$ mv ~/.local/Frameworks/Python.framework/Versions/3.3/lib/python3.3/distutils/distutils.cfg ~/tmp/
$ cat ~/tmp/distutils.cfg
[install]
install-scripts=/Users/gatto/.local/share/python3
install-lib=/Users/gatto/.local/lib/python3.3/site-packages
$ . venv/bin/activate
(venv) $ python distribute-0.6.36/distribute_setup.py
(venv) $ ls venv/lib/python3.3/site-packages/
distribute-0.6.36-py3.3.egg easy-install.pth setuptools-0.6c11-py3.3.egg-info setuptools.pth
请参阅bugs.python.org上的“distutils.cfg Can Break venv”问题。