【发布时间】:2020-09-22 05:10:00
【问题描述】:
所以,我有一个带有 Cython 扩展的 Python 包。
文件结构:
-lib_name (dir)
-setup.py
-lib_name (dir)
-__init__.py
-python_thing.py
-cython_thing.pyx
这是我的setup.py:
from setuptools import setup
from setuptools.extension import Extension
from Cython.Build import cythonize
extension = Extension(
name="cython_thing",
sources=["lib_name/cython_thing.pyx"],
extra_compile_args=["-ffast-math"]
)
setup(
ext_modules=cythonize(extension, language_level=3),
name='lib_name',
version='0.0.1',
packages=['lib_name'],
install_requires=['numpy', 'sklearn']
)
这是我的__init__.py:
from . import *
__all__ = ['python_thing', 'cython_thing']
我跑了一次sudo python3 setup.py install,一切似乎都顺利。我看到 pyx 文件被 cythonized 和编译,安装包,然后我似乎可以毫无问题地使用整个包。
然而,我现在对.pyx 文件进行了修改以进行一些故障排除。当我使用install 或develop 重新安装软件包并尝试使用它时,它会继续使用旧版本的代码。为了确认这一点,我已经将print('THIS IS THE NEW CODE') 添加到.pyx 文件中的函数中,以确保它能够识别自己。但是,这些行从不打印,告诉我我肯定还在以某种方式运行旧代码。我确实看到 Cython 重新对新代码进行了 cythonizing,但它不能安装它,因为它永远不会运行。
我已经尝试过sudo pip3 uninstall lib_name,然后重新安装,但没有骰子。仍然得到旧的代码路径。
如果有帮助,我将使用 from lib_name.cython_thing import cython_function 从 .pyx 文件中导入内容。
我相当肯定这一定是我的包结构有问题,或者可能是某个构建的对象被缓存在某个地方。谁能发现我做错了什么?如何确保在需要时完全重新安装我的包?
【问题讨论】:
-
您是否尝试删除旧的内置扩展?
-
您的
sudo python3 setup.py install将安装在系统目录(/usr/lib/... 或 /usr/local/...)中。你能python3 -c 'import lib_name ; print(lib_name.__file__)确认它在哪里找到它使用的 lib_name 吗? -
rm -rf build/在包含setup.py脚本的目录中,然后是python setup.py build_ext。您也可以尝试使用python setup.py clean build_ext进行单行,但我不确定它是否会完全擦除构建目录。
标签: python cython setuptools