Python无法在Mac OSX上找到distutils_path

Kyl*_*Fox 21 python macos distutils virtualenv

我一直在使用virtualenv + pip进行python开发.我不确定发生了什么,但每当我尝试运行命令行工具或导入库时,我都会收到以下错误消息:

Traceback (most recent call last):
  File "/Users/kyle/.virtualenvs/fj/bin/pip", line 4, in <module>
    import pkg_resources
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 698, in <module>
    the platform/python version defined at initialization are added.
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 701, in Environment
    search_path = sys.path
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 96, in get_supported_platform
    'Environment', 'WorkingSet', 'ResourceManager',
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg/pkg_resources.py", line 221, in get_build_platform
    if provDarwin:
  File "/Users/kyle/.virtualenvs/fj/lib/python2.6/distutils/__init__.py", line 14, in <module>
    exec open(os.path.join(distutils_path, '__init__.py')).read()
IOError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/__init__.py'
Run Code Online (Sandbox Code Playgroud)

从我可以破译的内容来看,Python试图distutils_path在Mac OSX系统版本中找到Python,而不是像我应该的那样的virtualenv版本.

不知道为什么这突然发生了.也许是最近的OSX更新?另一种可能性是我的硬盘驱动器即将死亡,因此Apple给了我一个新硬盘并运行了迁移助手.也许某些东西没有正确转移?

小智 33

distutils/__init__.py在转换到OS X 10.7 Lion(来自OS X 10.5 Leopard)和使用迁移助手时遇到了这个问题.我已经安装了Xcode 3.2.6 - 从而解决了缺少的install_name_tool问题.

迁移助手带来了我之前的virtualenvs,但由于它们基于Leopard的Python 2.5,我想我需要用当前的系统Python 2.7重新创建它们.

easy_install已经在PATH中 - 可能是因为它与Lion的Python 2.7捆绑在一起; 它似乎不太可能是迁移助理的结果.我使用easy_install来安装virtualenv.

在我看来,这个问题与Xcode或其缺乏无关.这是virtualenv命令放置在新虚拟环境中的文件中的一条特殊线:


  File "/path/to/my/virtualenv/lib/python2.7/distutils/__init__.py", line 16, in 
    exec(open(os.path.join(distutils_path, '__init__.py')).read())
IOError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/__init__.py'
Run Code Online (Sandbox Code Playgroud)

问题是,在与Lion捆绑的Python 2.7安装中,该库没有附带.py源文件.该目录包含.pyc和.pyo文件,但没有.py文件.virtualenv似乎并不期望这样.

我的解决方法是下载Python 2.7源代码:http:
//python.org/ftp/python/2.7.2/Python-2.7.2.tar.bz2

并打开distutils/__init__.py到预期的地方:
sudo tar xvjf ~/Downloads/Python-2.7.2.tar.bz2 --strip-components=2 -C /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7 Python-2.7.2/Lib/distutils/__init__.py

这允许virtualenv成功完成,并且生成的Python解释器似乎运行.

鉴于与Lion捆绑在一起的Python 2.7库是在没有源代码的情况下安装的,更改virtualenv以尝试其中的任何一个distutils/__init__.py或者似乎都有用distutils/__init__.pyc吗?

  • 我疯了吗?只是创建文件为我工作,一个拉`sudo touch __init __.py` (17认同)

Joh*_*Mee 22

> cd /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/
> sudo touch __init__.py
Run Code Online (Sandbox Code Playgroud)

Lion上开箱即用的python没有python源 - 只是编译的pyc/pyo文件.然而,virtualenv寻找distutils源文件只是为了确认它在哪里.原来我们需要做的就是触摸它正在寻找的文件.

积分属于"npdoty"和"Nat Goodspeed".

  • 可能只是"sudo touch /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/__init__.py" (5认同)

Kyl*_*Fox 7

原来问题是,无论出于何种原因,迁移助手都没有复制像gcc我这样的工具- 我重新安装了Xcode并且事情再次正常工作.