1

我的系统:Mac OS X 10.6.8、gcc 4.2、python 2.7、xcode 3.2.3

我使用 python 2.7 并且尝试执行时出错:import objc,它返回:ImportError: No module named objc

看起来 objc 模块不存在。但实际上我已经安装了 objc 模块。Snow Leopard 已经预装了 pyobjc,我还使用 python2.6 进行了检查(我的 Mac 中有 python 2.7 和 2.6)。因此,如果我使用 python2.6 调用import objc,我没有得到任何错误,这意味着objc存在,我可以毫无问题地使用该模块......但是如果我使用 python 2.7 导入,我会得到ImportError: No module named objc错误。

有没有人有任何解决方案?仅供参考,python2.6 预装了 OS X,而 2.7 是手动安装的。我已经使用 2.7 几个月了,没有任何问题。

4

2 回答 2

4

Python C 扩展模块objc不能在 python 版本之间重复使用。您必须objc单独安装 2.7 的模块。

通常,不同的 python 安装(例如 2.6 或 2.7 或 3.2)使用单独的模块导入位置,并且您通常会根据python 设置安装扩展。

于 2012-07-02T13:50:28.843 回答
2

通常,使用一个 python 安装安装的包不适用于其他 python 安装。您可以通过弄乱sys.path(或通过在您的环境中设置 PYTHONPATH )并将您的模块安装到一个公共位置来使它们可用,但是,正如@MartijnPieters 所指出的,如果它是一个 C 扩展,您需要重新构建python 2.7的模块(然后你不能把它放在一个公共的地方)。通常,这很简单:

<sudo> python2.6 setup.py install #install for python 2.6
<sudo> python2.7 setup.py install #install for python 2.7

因为该命令python通常只是指向您首选 python 安装的(软)链接。

sudo 可能需要也可能不需要,具体取决于您的 python 实现在您的路径上的位置。

顺便说一下,这也适用于纯 python 模块。由于源代码通常不会占用太多空间,如果您要在 python 2.6 和 python 2.7 之间来回切换,这可能是安装所有模块的好方法。

easy_install如果您用于安装软件包,也会发生同样的事情:

easy_install-2.6 somepackage
easy_install-2.7 somepackage
于 2012-07-02T13:55:36.543 回答