gpt4 book ai didi

python - 如何使用 distutils 安装 Python 扩展模块?

转载 作者:行者123 更新时间:2023-12-01 00:01:11 25 4
gpt4 key购买 nike

我正在开发一个名为“lehmer”的 Python 包,其中包含一堆用 C 编写的扩展模块。目前,我有一个扩展模块“rng”。我正在使用 Python 的 Distutils 来构建和安装该模块。我可以编译并安装该模块,但是当我尝试使用 import lehmer.rng 导入模块时或from lehmer import rng ,Python 解释器抛出 ImportError异常(exception)。我可以很好地导入“lehmer”。

这是我的setup.py的内容文件:

from distutils.core import setup, Extension

exts = [Extension("rng", ["lehmer/rng.c"])]

setup(name="lehmer",
version="0.1",
description="A Lehmer random number generator",
author="Steve Park, Dave Geyer, and Michael Dippery",
maintainer="Michael Dippery",
maintainer_email="mpd@cs.wm.edu",
packages=["lehmer"],
ext_package="lehmer",
ext_modules=exts)

当我列出Python的site-packages的内容时目录中,我看到以下内容:

th107c-4 lehmer $ ls /scratch/usr/lib64/python2.5/site-packages/lehmer
__init__.py __init__.pyc rng.so*

我的PYTHONPATH环境变量设置正确,所以这不是问题(如前所述,我可以 import lehmer 就好,所以我知道 PYTHONPATH 不是问题)。 Python 使用以下搜索路径(如 sys.path 报告):

['', '/scratch/usr/lib64/python2.5/site-packages', '/usr/lib/python25.zip', '/usr/lib64/python2.5', '/usr/lib64/python2.5/plat-linux2', '/usr/lib64/python2.5/lib-tk', '/usr/lib64/python2.5/lib-dynload', '/usr/lib64/python2.5/site-packages', '/usr/lib64/python2.5/site-packages/Numeric', '/usr/lib64/python2.5/site-packages/PIL', '/usr/lib64/python2.5/site-packages/SaX', '/usr/lib64/python2.5/site-packages/gtk-2.0', '/usr/lib64/python2.5/site-packages/wx-2.8-gtk2-unicode', '/usr/local/lib64/python2.5/site-packages']

更新

它在 OpenSUSE 10 机器上使用时可以工作,但在 Mac OS X 上测试时 C 扩展仍然无法加载。以下是 Python 解释器的结果:

>>> sys.path
['', '/usr/local/lib/python2.5/site-packages', '/opt/local/lib/python25.zip', '/opt/local/lib/python2.5', '/opt/local/lib/python2.5/plat-darwin', '/opt/local/lib/python2.5/plat-mac', '/opt/local/lib/python2.5/plat-mac/lib-scriptpackages', '/opt/local/lib/python2.5/lib-tk', '/opt/local/lib/python2.5/lib-dynload', '/opt/local/lib/python2.5/site-packages']
>>> from lehmer import rng
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name rng
>>> import lehmer.rngs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named rngs
>>> import lehmer.rng
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named rng
>>> from lehmer import rngs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name rngs

最佳答案

郑重声明(并且因为我厌倦了看到此标记为未答复),以下是问题:

  1. 由于当前目录会自动添加到 Python 包路径中,因此解释器首先在当前目录中查找包;由于某些 C 模块未在当前目录中编译,因此解释器无法找到它们。 解决方案:不要从存储代码工作副本的同一目录启动解释器。
  2. Distutils 未在 OS X 上安装具有正确权限的模块。解决方案:修复权限。

关于python - 如何使用 distutils 安装 Python 扩展模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/302867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com