[英]Cython extension not re-installing via setup.py after modification
所以,我有一个 Python package,带有 Cython 扩展。
文件结构:
-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
一次,go 似乎一切顺利。 我看到pyx文件被cythonized和编译,安装了package,然后我似乎可以毫无问题地使用整个package。
但是,我现在对.pyx
文件进行了修改以进行一些故障排除。 当我使用install
或develop
重新安装 package 并尝试使用它时,它继续使用旧版本的代码。 为了确认这一点,我已经将print('THIS IS THE NEW CODE')
添加到.pyx
文件中的函数,以确保它能够识别自己。 但是,这些行从不打印,告诉我我肯定还在以某种方式运行旧代码。 我确实看到 Cython 重新对新代码进行了 cythonizing,但它一定不能安装它,因为它永远不会运行。
我已经尝试过sudo pip3 uninstall lib_name
,然后重新安装,但没有骰子。 仍然得到旧的代码路径。
如果有帮助,我将使用from lib_name.cython_thing import cython_function
.pyx
文件中导入内容。
我相当确定这一定是我的 package 结构的问题,或者可能是一些内置的 object 被缓存在某处。 谁能发现我做错了什么? 如何确保在需要时完全重新安装我的 package?
开发时,我通常有一个虚拟环境,我在其中安装我的 cython package 开发人员模式通过(在setup.py
文件夹中):
pip install -e .
重新运行pip install -e.
将更新为当前的 state。
使用pip install
(或setup.py install
)时,需要先卸载 package,然后才能重新安装。
以上是快速和方便的,但也必须不时在干净的虚拟环境中检查安装。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.