【发布时间】:2020-06-28 06:19:22
【问题描述】:
我正在维护一个包含基于 cython 的 c 扩展的 python 包。 源码在github上:https://github.com/vlkit/vlkit。
这是我的setup.py:
import os
from setuptools import setup, find_packages
from distutils.core import Extension
try:
import numpy
except ImportError: # We do not have numpy installed
os.system("pip install numpy")
try:
from Cython.Build import cythonize
except ImportError: # We do not have Cython installed
os.system("pip install Cython")
import numpy
from Cython.Build import cythonize
__version__ = "0.1.0-b3"
exts = [Extension(name='vltools.nms.nms_ext',
sources=["vltools/nms/nms_ext.pyx"],
include_dirs=[numpy.get_include()])
]
setup(name='vltools',
version=__version__,
description='vision and learning tools',
url='https://github.com/vltools/vltools',
author_email='a@b.c',
license='MIT',
packages=find_packages(),
ext_modules=cythonize(exts),
zip_safe=False,
data_files=[("data", ["data/imagenet1000_clsidx_to_labels.txt"])]
)
使用python setup build && python setup.py install 在本地构建时,一切顺利。
但是,当我尝试使用python setup.py sdist 创建源分发,然后从生成的dist/vltools-0.1.0b3.tar.gz 安装时,它会遇到错误:
ValueError: 'vltools/nms/nms_ext.pyx' doesn't match any files
据我了解,安装实际需要的是nms_ext.c,它确实在生成的dist/vltools-0.1.0b3.tar.gz内。
但是,在我的 setup.py 中,它的源代码是“nms_ext.pyx”:
exts = [Extension(name='vltools.nms.nms_ext',
sources=["vltools/nms/nms_ext.pyx"],
include_dirs=[numpy.get_include()])
]
那么在使用python setup.py sdist 创建源分发时应该怎么做?
【问题讨论】:
-
为我工作。尝试升级
pip、setuptool和Cython。 -
能否添加您正在使用的python、pip等版本?您还可以添加遇到错误时键入的确切命令吗? (我猜是
pip3 install --user dist/vltools-0.1.0b3.tar.gz,但最好在问题中确认) -
顺便说一句,
try: import numpy except: os.system(pip install numpy)是个坏主意。只是让错误引发就可以了。因为通常,如果找不到 numpy,则意味着您没有使用您认为正在使用的 exe(例如,如果 python2 安装在 python3 旁边)。 -
感谢您的帮助。我发现@hoefling 的回答解决了我的问题。
标签: python pip cython setuptools