将Cython标记为构建依赖关系?

int*_*ect 5 python distutils pip cython pypi

有一个带有setup.py的Python包,可以这样读取:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  name = 'fastahack',
  ext_modules=[
    Extension("fastahack.cfastahack",
              sources=["fastahack/cfastahack.pyx", "lib/Fasta.cpp", "lib/split.cpp"],
              libraries=["stdc++"],
              include_dirs=["lib/"],
              language="c++"),
    ],
    package_data = {'lib': ['*.pyx', "*.c", "*.h", "README.rst"]},
    package_dir = {"fastahack": "fastahack"},
    cmdclass = {'build_ext': build_ext},
    packages = ['fastahack', 'fastahack.tests'],
    author = "Brent Pedersen",
    author_email="bpederse@gmail.com",
    #test_suite='nose.collector'
)
Run Code Online (Sandbox Code Playgroud)

如果未安装Cython,则无法导入此setup.py.据我所知,导入setup.py是像pip这样的工具如何找出包的依赖关系.我想设置这个包,以便它可以上传到PyPI,事实上它依赖于Cython注意到,所以当你尝试"pip install fastahack"时,或当你试图"下载"时,将下载并安装Cython pip install"直接来自Git存储库.

我如何打包此模块,以便在未安装Cython时从Internet正确安装?始终使用最新版本的Cython将是一个加号.

Epi*_*ink 5

您可以使用PEP-518项目规范将 Cython 指定为构建依赖项。

在文件中pyproject.toml(与 位于同一目录中setup.py)插入:

[build-system]
requires = ["setuptools", "wheel", "Cython"]
Run Code Online (Sandbox Code Playgroud)

然后将在构建包之前安装 Cython。

请注意,(当前)如果您将软件包本地安装为可编辑(即使用或),则需要传递到--no-use-pep517setuptools pip install--editable-e v64支持使用 pyproject.toml 构建进行可编辑安装


小智 1

使用tryandexcept进行导入,并根据导入是否成功Cython修改您的。setup看Pandassetup.py为例