【问题标题】:How can I fix my virtualenv?如何修复我的 virtualenv?
【发布时间】:2012-08-23 08:38:45
【问题描述】:

我刚刚升级到 OS X Mountain Lion,它杀死了我的大部分 Python 环境。我已经从头开始重新安装了分发 0.6.28 (python distribute_setup.py install --prefix ~/Library/Python/2.7/site-packages) 和 pip 1.1 (python setup.py install --prefix ~/Library/Python/2.7/site-packages)。然后我通过pip 安装virtualenvvirtualenvwerapper 没有错误,但是命令virtualenv ENVTEST 失败如下:

$ virtualenv ENVTEST
New python executable in TESTENV/bin/python
Please make sure you remove any previous custom paths from your /Users/x/.pydistutils.cfg file.
Installing setuptools.................done.
Installing pip....
Complete output from command /Users/csh401/TESTENV/bin/python /Users/x/TESTENV/bin/easy_install /Users/x/Librar...ort/pip-1.0.2.tar.gz:
/Users/x/TESTENV/bin/python: can't open file '/Users/x/TESTENV/bin/easy_install': [Errno 2] No such file or directory
----------------------------------------
...Installing pip...done.
Traceback (most recent call last):
  File "/Users/x/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.7.2', 'console_scripts', 'virtualenv')()
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 942, in main
    never_download=options.never_download)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 1054, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 654, in install_pip
    filter_stdout=_filter_setup)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 1020, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /Users/x/.virtualenvs/env1/bin/python -x /Users/x/.virtu...nv1/bin/easy_install /Users/x/Librar...pport/pip-1.1.tar.gz failed with error code 2

我最好的猜测是,这与我在安装 distributepip 时遇到问题有关,直到我添加了 --prefix 参数。但是现在 pip 工作时,它并没有安装到正确的位置。

更新

pip 安装了旧版本的 virtualenv。我跑了pip install -U virtualenv,这运行得很顺利。现在仍然出现错误,但出现了不同的错误。

$ virtualenv -vvv TESTENV
Creating TESTENV/lib/python2.7
Symlinking Python bootstrap modules
  Symlinking TESTENV/lib/python2.7/config
  Symlinking TESTENV/lib/python2.7/lib-dynload
  Symlinking TESTENV/lib/python2.7/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking TESTENV/lib/python2.7/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking TESTENV/lib/python2.7/ntpath.py
  Symlinking TESTENV/lib/python2.7/genericpath.py
  Symlinking TESTENV/lib/python2.7/fnmatch.py
  Symlinking TESTENV/lib/python2.7/locale.py
  Symlinking TESTENV/lib/python2.7/encodings
  Symlinking TESTENV/lib/python2.7/codecs.py
  Symlinking TESTENV/lib/python2.7/stat.py
  Symlinking TESTENV/lib/python2.7/UserDict.py
  File TESTENV/lib/python2.7/lib-dynload/readline.so already exists
  Symlinking TESTENV/lib/python2.7/copy_reg.py
  Symlinking TESTENV/lib/python2.7/types.py
  Symlinking TESTENV/lib/python2.7/re.py
  Symlinking TESTENV/lib/python2.7/sre.py
  Symlinking TESTENV/lib/python2.7/sre_parse.py
  Symlinking TESTENV/lib/python2.7/sre_constants.py
  Symlinking TESTENV/lib/python2.7/sre_compile.py
  File TESTENV/lib/python2.7/lib-dynload/zlib.so already exists
  Symlinking TESTENV/lib/python2.7/warnings.py
  Symlinking TESTENV/lib/python2.7/linecache.py
  Symlinking TESTENV/lib/python2.7/_abcoll.py
  Symlinking TESTENV/lib/python2.7/abc.py
  Symlinking TESTENV/lib/python2.7/_weakrefset.py
Creating TESTENV/lib/python2.7/site-packages
Writing TESTENV/lib/python2.7/site.py
Writing TESTENV/lib/python2.7/orig-prefix.txt
Writing TESTENV/lib/python2.7/no-global-site-packages.txt
Creating parent directories for TESTENV/include
Symlinking TESTENV/include/python2.7
Creating TESTENV/bin
New python executable in TESTENV/bin/python
Changed mode of TESTENV/bin/python to 0755
MacOSX Python framework detected
Symlinking TESTENV/.Python
Testing executable with TESTENV/bin/python -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))"
Got sys.prefix result: u'/Users/x/TESTENV'
Please make sure you remove any previous custom paths from your /Users/x/.pydistutils.cfg file.
Creating TESTENV/lib/python2.7/distutils
Writing TESTENV/lib/python2.7/distutils/__init__.py
Writing TESTENV/lib/python2.7/distutils/distutils.cfg
Using existing distribute egg: /Users/x/Library/Python/2.7/site-packages/virtualenv_support/distribute-0.6.27.tar.gz
Installing distribute...
  Running command /Users/x/TESTENV/bin/python -c "#!python
\"\"\"Bootstra... main(sys.argv[1:])
" -v --always-copy -U distribute
  Extracting in /var/folders/97/bds2slvx25s53xx1b_strvfs4xdq4b/T/tmpbqvjfq
  Now working in /var/folders/97/bds2slvx25s53xx1b_strvfs4xdq4b/T/tmpbqvjfq/distribute-0.6.27
  Installing Distribute
  running install
  Checking .pth file support in /Users/x/Library/Python/2.7/site-packages/
  /Users/x/TESTENV/bin/python -E -c pass
  TEST FAILED: /Users/x/Library/Python/2.7/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:

      /Users/x/Library/Python/2.7/site-packages/

  and your PYTHONPATH environment variable currently contains:

      ''

  Here are some of your options for correcting the problem:

  * You can choose a different installation directory, i.e., one that is
    on PYTHONPATH or supports .pth files

  * You can add the installation directory to the PYTHONPATH environment
    variable.  (It must then also be on PYTHONPATH whenever you run
    Python and want to use the package(s) you are installing.)

  * You can set up the installation directory to support ".pth" files by
    using one of the approaches described here:

    http://packages.python.org/distribute/easy_install.html#custom-installation-locations

  Please make the appropriate changes for your system and try again.
  Something went wrong during the installation.
  See the error message above.
...Installing distribute...done.
Installing existing pip-1.1.tar.gz distribution: /Users/x/Library/Python/2.7/site-packages/virtualenv_support/pip-1.1.tar.gz
Installing pip...
  Running command /Users/x/TESTENV/bin/python -x /Users/x/TESTENV/bin/easy_install /Users/x/Librar...pport/pip-1.1.tar.gz
  /Users/x/TESTENV/bin/python: can't open file '/Users/x/TESTENV/bin/easy_install': [Errno 2] No such file or directory
  Complete output from command /Users/x/TESTENV/bin/python -x /Users/x/TESTENV/bin/easy_install /Users/x/Librar...pport/pip-1.1.tar.gz:
  /Users/x/TESTENV/bin/python: can't open file '/Users/x/TESTENV/bin/easy_install': [Errno 2] No such file or directory
----------------------------------------
...Installing pip...done.
Traceback (most recent call last):
  File "/Users/x/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.7.2', 'console_scripts', 'virtualenv')()
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 942, in main
    never_download=options.never_download)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 1054, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 654, in install_pip
    filter_stdout=_filter_setup)
  File "/Users/x/Library/Python/2.7/site-packages/virtualenv.py", line 1020, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /Users/x/TESTENV/bin/python -x /Users/x/TESTENV/bin/easy_install /Users/x/Librar...pport/pip-1.1.tar.gz failed with error code 2

所以看起来我的 PYTHONPATH 在 vi​​rtualenv 试图构建的环境中以某种方式被空白。这应该很容易解决,对吧?

【问题讨论】:

  • 你说“杀死了我的 Python 环境”,但你没有解释那个环境。使用供应商 Python?酿造安装?其他?
  • 在升级之前,pip 和 virtualenv 使用默认系统 Python 工作。我有许多以前存在的 virtualenvs 可以正常工作,但我无法创建任何新的 virtualenvs。我不记得我以前是如何安装 pip 和 virtualenv 的。

标签: python virtualenv osx-mountain-lion


【解决方案1】:

我不确定,因为我没有测试过我的想法。

以下代码为一个包,安装library at /x/lib/python2.x/site-packagesscripts at /x/bin

python setup.py install --prefix /x

所以你不应该这样做python setup.py install --prefix /x/lib/python2.x/site-packages

还可以尝试查看脚本pipvirtualenv 是否使用正确的python 二进制文件。脚本中的 shebang 会告诉你这一点。如果不是,他们可能正在使用不同的发行版。

#!/usr/local/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.1','console_scripts','pip'
__requires__ = 'pip==1.1'
import sys
from pkg_resources import load_entry_point

sys.exit(
   load_entry_point('pip==1.1', 'console_scripts', 'pip')()
)

上述脚本是指二进制文件位于/usr/local/bin/python 的发行版。

在一个系统上,您可以同时存在多个 python 发行版。

【讨论】:

    【解决方案2】:

    distutils 有问题。我删除了 $HOME/.pydistutils.cfg 并运行 sudo setup.py install 以在正确的位置分发,然后 sudo setup virtualenv 将其放置到 Python 2.7 的 MacPorts 版本的相应站点包目录中。现在我可以毫无问题地运行virtualenv TestEnv

    【讨论】:

      【解决方案3】:

      在 VPS 和我的 mac 上设置 centos 时遇到同样的问题。

      我找到了解决办法,如果你在 pip install 之后没有导出一些代码,就会出现这种情况。解决步骤是:

      写命令行:which pip 显示:'/usr/bin/pip' 像这样 然后在命令行上运行此代码:export PATH="/usr/bin:$PATH"

      我希望这也对你有用

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 1970-01-01
        • 2011-11-18
        • 2019-10-15
        • 1970-01-01
        • 2020-09-26
        • 2023-03-22
        • 2017-06-11
        • 2019-08-29
        相关资源
        最近更新 更多