Python在Mac OSX上找不到distutils路径

2024-03-28 21:55:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用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'

据我所知,Python试图在Mac OSX系统版本Python中找到distutils_path,而不是像它应该是的那样找到我的virtualenv版本。

不知道为什么会突然发生这种事。可能是最近的OSX更新?另一种可能是我的硬盘快死了,所以苹果给了我一个新的硬盘,并运行了迁移助手。也许有些东西没有正确地传递过来?


Tags: pathinpylibpackageslinesitepkg
3条回答

结果发现问题是迁移助手,不管是什么原因,没有复制像gcc这样的工具——我重新安装了Xcode,一切又正常了。

我在转换到OSX10.7Lion(来自OSX10.5Leopard)并使用迁移助手时遇到了这个问题。我已经安装了Xcode 3.2.6——因此解决了缺少安装名工具的问题。

Migration Assistant带来了我以前的virtualenv,但是由于它们基于Leopard的Python 2.5,我想我需要用当前的系统python2.7重新创建它们。

easy_install已经走上了正轨——可能是因为它与Lion的Python2.7捆绑在一起;它似乎不太可能是迁移助手的结果。我用easy_install安装了virtualenv。

在我看来,这个问题与Xcode或缺少Xcode没有任何关系。这是virtual env命令在新虚拟环境中放置的文件中的特殊行:


  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'

问题是,在与Lion捆绑的Python2.7安装中,库中没有.py源文件。该目录包含.pyc和.pyo文件,但不包含.py文件。virtualenv似乎并不期望如此。

我的解决方法是下载Python2.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__.pydistutils/__init__.pyc似乎很有用?

> cd /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/
> sudo touch __init__.py

Lion上现成的python没有python源代码,只有编译过的pyc/pyo文件。然而,virtualenv寻找distutils源文件只是为了确认它在哪里。结果我们所需要做的就是触摸它正在寻找的文件。

学分属于“npdoty”和“Nat Goodspeed”。

相关问题 更多 >