导入错误:找不到名为Foundation的模块。

24

我试着按照"使用Xcode 3.2开发PyObjC"的答案进行操作,但因为我的声望不够无法在问题下方留言,所以我将答案放在这里:


以下是我在Snow Leopard上使PyObjC工作的步骤:

  • 使用Finder,我打开了 Go > Connect to Server... 然后以访客身份连接到http://svn.red-bean.com/pyobjc/trunk/pyobjc/pyobjc-xcode/

  • 然后我在本地系统上创建了一个名为Xcode的文件夹,路径是~Library/Application Support/Developer/Shared/Xcode/。(你可能已经有这个文件夹了,但是我还没有为自己定制过任何东西)。

  • 我将red-bean服务器上的File Templates文件夹复制到了新的Xcode文件夹中。

  • Project Templates文件夹复制到其他位置,例如桌面。

  • 使用终端,进入桌面上临时的Project Templates文件夹,并运行以下命令来“构建”模板:

$ cd ~/Desktop/Project\ Templates/

$ ./project-tool.py -k -v --template ~/Desktop/Project\ Templates/Cocoa-Python\ Application/CocoaApp.xcodeproj/TemplateInfo.plist Cocoa-Python\ Application ~/Library/Application\ Support/Developer/Shared/Xcode/Project\ Templates/Cocoa-Python\ Application


当我尝试运行以./project-tool.py开头的那一行时,终端会报以下错误:

Traceback (most recent call last):  
  File "./project-tool.py", line 22, in <module>  
     from Foundation import NSDictionary  
 ImportError: No module named Foundation

我正在运行Snow Leopard,并安装了Xcode 3.2.1。我已经阅读到此模块应该已经安装并工作。我已经阅读到,您可以通过在Python命令行中运行>>> import objc来测试PyObjC模块是否工作。当我执行此操作时,我得到:

>>> import objc
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
ImportError: No module named objc  

有人能帮我解决这个错误吗?似乎我应该能够使用我的Snow Leopard安装程序自动完成所有这些操作,但是我做不到。


Foundation 模块是 Mac 平台特有的吗? - jxramos
1
@jxramos 是的,没错。 - Chris Redford
10个回答

30

我曾经遇到过同样的问题。我的情况可能是因为使用Homebrew安装了自己想要尝试的Python。

由于我担心混淆Python版本,所以没有按照上述方法创建链接,而是使用以下命令安装了一个新的pyobjc:

$ pip install pyobjc

感兴趣的话,可以从(http://pythonhosted.org/pyobjc/)了解更多。

PyObjC项目旨在提供Python和Objective-C编程语言之间的桥梁。


6

好的,事实证明,在修改了mjv的回答后,我通过输入以下内容使其工作:

export PYTHONPATH="/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/PyObjC/"

在执行./project-tool.py命令之前,我仍然觉得这样做很荒谬,如果有人能看出为什么,我会非常高兴知道原因。
这样做也解决了问题。
>>> import objc

线路工作正常。


2
如果有帮助的话,当我只用“python”执行我的脚本时,我得到了相同的错误...但是如果我使用/usr/bin/python来执行它,那么它就可以工作(而无需导出任何其他路径)。 - Joe Strout

5

这是因为 PyObjC 存在于以下路径: /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/PyObjC

编辑: 我找到了如何让 "import objc" 工作的方法,只需要执行以下命令: export PYTHONPATH="/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/"

它将把所有目录添加到 Python 路径 (sys.path) 中。


4

对于Python 2.7版本

设置环境变量PYTHONPATH="/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/"


3

两种可能性:

  • 要么是Fundation模块不存在
  • 要么是Python解释器不知道在哪里找到这个文件

Python在PythonPath中查找模块

有关 Python Path 如何创建等更多详细信息,请参见此SO问题


谢谢您。了解如何编辑Python路径非常有用。不幸的是,我不知道应该添加哪个路径以便包含Foundation。 - Chris Redford

2

运行 python -v 命令可以跟踪导入语句,这同样适用于交互模式。


抱歉,我运行了代码并且得到了输出结果。但我不明白我应该寻找什么。 - Chris Redford

2

我可以通过运行/usr/bin/python file-to-run.py来访问我的OSX上安装的带有Foundation的Python。


1

在另一条评论中看到了这个问题,我也因为通过homebrew安装Python而遇到了这个问题。我的pyobjc安装最终进入了Python homebrew安装,但是我的pythonpath链接到了与macOS捆绑的Python,所以存在着很大的不匹配,我没有成功地在.zshrc或.zprofile中重新路由pythonpath。

最终,以下步骤解决了这个问题:

  1. brew uninstall python
  2. pip3 install -U pyobjc

1

0

我在/usr/local/lib/python3.9/site-packages/目录下找到了foundation文件夹,它与AppKit文件夹并列。将其重命名为Foundation(大写F)后,导入成功了。虽然文件系统不区分大小写,但似乎import实现的某些部分是区分大小写的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接