【问题标题】:Cython extension not re-installing via setup.py after modification修改后未通过 setup.py 重新安装 Cython 扩展
【发布时间】: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 文件进行了修改以进行一些故障排除。当我使用installdevelop 重新安装软件包并尝试使用它时,它会继续使用旧版本的代码。为了确认这一点,我已经将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


【解决方案1】:

在开发时,我通常有一个虚拟环境,我在开发者模式下通过(在带有setup.py 的文件夹中)安装我的 cython 包:

 pip install -e .

重新运行pip install -e . 将更新到当前状态。

使用pip install(或setup.py install)时,需要先卸载软件包,然后才能重新安装。


以上方法快速方便,但也需要时常检查是否安装在干净的虚拟环境中。

【讨论】:

  • 谢谢。我认为可能存在重叠的问题。首先,我需要在扩展定义中有name="lib_name.cython_thing", 才能正确导出它。其次,正如你提到的,我需要卸载软件包并重新安装......出于某种原因,没有 Cython,我使用 setup.py develop 总是没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2020-01-29
  • 2017-09-03
  • 2023-01-05
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多