当Python模块(cairo)成功安装但无法导入时,可能是什么问题?

2 投票
1 回答
8204 浏览
提问于 2025-04-18 10:38

当一个Python模块成功安装后,却在Python中(通过PyCharm IDE)无法导入时,可能是什么问题呢?我应该遵循什么检查清单来诊断这个问题,以后如果模块安装成功但又无法导入时也能用得上?

在这个具体的例子中,我安装了一个叫cairo的Python矢量图形模块。http://cairographics.org/releases/pycairo-1.8.8.tar.gz

下面是成功安装的情况:

sudo python setup.py install
cairo >= 1.8.8 detected
creating pycairo.pc
creating src/config.h
running install
running build
running build_ext
running install_lib
creating /Library/Python/2.7/site-packages/cairo
copying build/lib.macosx-10.9-intel-2.7/cairo/_cairo.so -> /Library/Python/2.7/site-packages/cairo
running install_data
creating /System/Library/Frameworks/Python.framework/Versions/2.7/include/pycairo
copying src/pycairo.h -> /System/Library/Frameworks/Python.framework/Versions/2.7/include/pycairo
copying pycairo.pc -> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/pkgconfig
running install_egg_info
Writing /Library/Python/2.7/site-packages/pycairo-1.8.8-py2.7.egg-info

一切看起来都很顺利,但后来在Python中调用这个模块时却失败了,出现了错误:ImportError: No module named cairo

一种可能是它安装在了错误的目录——/Library/Python/2.7/site-packages/。另一种可能是我需要明确告诉Python这个模块的位置。也就是说:/Library/Python/2.7/site-packages/cairo,这是根据上面安装脚本的输出得出的。

这很奇怪,因为cairo确实在/Library/Python/2.7/site-packages/中,而我可以导入同一目录下的其他库,比如PIL。

enter image description here

根据aIKID的建议,我尝试使用pip来获取已安装的包。从中我得到了一个很长的列表,其中包括一个叫pycairo的模块。我尝试导入pycairo和cairo,但仍然出现导入错误。有趣的是,“cairo”在/Library/Python/2.7/site-packages/cairo中找到了,但在调用pip.get_installed_distributions()后找到了“pycairo”。看起来这个分发包叫pycairo,而模块叫cairo。导入cairo应该可以,但无论如何这两个导入都失败了。

enter image description here

根据Christopher的建议,我检查了/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/目录,但没有找到cairo。同样,我也没有找到PIL(Python图像库)。不过我仍然可以导入PIL,它在/Library/Python/2.7/site-packages/中,与cairo在同一个地方。

Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL, cairo
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named cairo

1 个回答

0

你可以打开Python的交互模式,然后按照以下步骤来确认你的库路径:

Python 2.7.5 (default, Mar  9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.path
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>

如你所见,/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ 是我系统中的路径。

你可能安装了多个版本的Python,但你可以通过这样的方法来确认你正在使用的是哪个版本。

撰写回答