Python 2.5上无法导入ctypes模块

5
我正在尝试导入ctypes,我使用的是通过macports安装的Python 2.5.5(在Mac OS X 10.6上)。
我收到一个错误,说“ImportError: No module named _ctypes”(请参见下面的详细信息)。据我了解,ctypes应该预先安装在python 2.5中。有什么建议吗?
谢谢, Saurabh
错误详情:
$ python
Python 2.5.5 (r255:77872, Nov 30 2010, 00:05:47) 
[GCC 4.2.1 (Apple Inc. build 5659)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/\_\_init\_\_.py", line 10, in <module>
    from _ctypes import Union, Structure, Array
ImportError: No module named _ctypes

更新:根据Ned的回复,我检查了/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-dynload目录。那里没有_ctypes.so文件,但是存在两个相关的文件:

-rwxr-xr-x  2 root  wheel  136176 Nov 30 00:07 _ctypes_failed.so
-rwxr-xr-x  2 root  wheel   26160 Nov 30 00:05 _ctypes_test.so

这是否意味着我需要重新安装 ctypes 库?

更新2: 重新安装 Python 2.5 解决了问题。不太确定原始问题是由什么引起的。


哇,我不知道人们仍在使用2.5版本。 - rook
@Rook,仍有人在使用Python 2.4.x。 - Adam Vandenberg
在Red Hat、CentOS和其他一些服务器发行版上,2.5甚至2.4仍然很常见。Google不使用2.5以上的版本(事实上,为了开发App Engine,你必须针对2.5)。 - Rafe Kettler
1
可能与路径变量有关。此帖子的解决方法是删除APPDATA环境变量。也许这可以解决你的问题? - moinudin
@marcog 我没有任何名为APPDATA的环境变量。@Rook 我需要Python2.5因为有一些依赖关系。在我的系统上,导入ctypes确实可以很好地工作于Python2.6。 - saurabh
显示剩余2条评论
3个回答

1

最新的Mac OS X附带Python 2.6。尝试使用它而不是macports。在我的系统上,导入ctypes已经可以工作。

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
>>>

1

这可能是一个文件权限问题。我手边没有MacPorts Python 2.5安装包,但是根据MacPorts Python 2.6,应该有一个类似这样的文件:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.5
$ cd ./lib/python2.5/lib-dynload/
$ ls -l _ctypes.so 
-rwxr-xr-x  2 root  wheel  151536 Oct  8 00:26 _ctypes.so*

如果没有,请更新您的问题,附上上面lib-dynload目录下ls -l的结果。
更新:根据您提供的额外信息,_ctypes_failed.so的存在表明在构建和安装Python 2.5时构建_ctypes失败。尝试使用详细模式重新安装它以查看失败原因:
$ port sudo selfupdate
$ port -v upgrade --force python25

0

安装libffi,然后重新构建Python。


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