[英]What is the best replacement for python setup.py install when Cython needs to be compiled?
使用最新版本的setuptools时, python setup.py install
命令已被弃用(有关详细信息,请参阅https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html )。
(venv) [jon@dev02 py38]$ python setup.py install
running install
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is
deprecated. Use build and pip and other standards-based tools.
warnings.warn(
/home/jon/.jenkins/workspace/Farm_revision_linux_py36/TOXENV/py38/venv/lib64/python3.8/site-
packages/setuptools/command/easy_install.py:156: EasyInstallDeprecationWarning: easy_install
command is deprecated. Use build and pip and other standards-based tools.
warnings.warn(
running bdist_egg
running egg_info
... etc
建议直接pip install.
从源代码安装 package,但这不会编译任何 Cython 代码。 这样做的最佳方法是什么?
Cython文档仍然推荐使用setup.py
,我找不到更好的建议。 似乎开发人员安装 ( pip install -e.
) 确实编译了 Cython 文件,或者您可以在运行 pip install 后python setup.py build_ext --inplace
pip install.
. 这些选项都不是理想的,所以我想知道是否有建议的替代方案。
编辑:
package setup.py 文件包含这段代码,它应该编译 Cython 文件:
try:
import numpy
from Cython.Build import cythonize
cython_files = ["farm/rasters/water_fill.pyx"]
cython_def = cythonize(cython_files, annotate=True,
compiler_directives={'language_level': str(sys.version_info.major)})
include_dirs = [numpy.get_include()]
except ImportError:
cython_def = None
include_dirs = None
使用python setup.py install
时,farm/rasters 目录包含以下文件:
water_fill.c
water_fill.cpython-38-x86_64-linux-gnu.so
water_fill.html
water_fill.pyx
安装时使用pip install.
,该目录不包含 .so 文件,当我们尝试运行 water_fill 测试时,我们得到这样的错误
________________________________ TestFlowDown1D.test_distribute_1d_trough_partial_3 _________________________________
farm/rasters/tests/test_flood_enhance.py:241: in test_distribute_1d_trough_partial_3
actual_arr = water_fill.water_fill_1d(arr, additional_value)
E AttributeError: 'NoneType' object has no attribute 'water_fill_1d'
我相信如果保留 setup.py 但添加 pyproject.toml,警告应该消失 go。 https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html中描述了如何执行此操作。
这是他们给出的示例 pyproject.toml 文件:
[build-system]
requires = ["setuptools", "wheel", "Cython"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.