【发布时间】:2020-04-20 01:55:33
【问题描述】:
简而言之
我尝试编译一个名为 extension2 的 cython 扩展,该扩展从自创建的包中导入文件 extension。在构建extension2 时,我得到了extension.pxd 没有找到的错误,虽然这个文件正好在指定的路径中。
详情
我正在构建两个涉及 cython 的包,一个包A 和一个依赖于A 的包B。 A 是命名空间包nsp 的子包。即文件夹结构如下:
├── nsp
│ └── A
| ├── extension.pxd
| ├── extension.pyx
│ └── __init__.py
└── setup.py
这里,setup.py 内容如下:
from setuptools import setup
from setuptools.extension import Extension
# factory function
def my_build_ext(pars):
# import delayed:
from setuptools.command.build_ext import build_ext as _build_ext
# include_dirs adjusted:
class build_ext(_build_ext):
def finalize_options(self):
_build_ext.finalize_options(self)
# Prevent numpy from thinking it is still in its setup process:
__builtins__.__NUMPY_SETUP__ = False
import numpy
self.include_dirs.append(numpy.get_include())
#object returned:
return build_ext(pars)
extensions = [Extension(nsp.A.extension, ['nsp/A/extension.cpp'])]
setup(
cmdclass={'build_ext' : my_build_ext},
setup_requires=['numpy'],
install_requires=['numpy'],
packages=['nsp.A'],
ext_modules=extensions
package_data={
'nsp/A': ['*.pxd', '*.pyx']
},
)
安装文件的灵感来自add-numpy-get-include-argument-to-setuptools-without-preinstalled-numpy 和distributing-cython-modules。 cython 文件已经使用另一个脚本成功转换为 .cpp 文件。
我用
安装包A
pip install .
在setup.py的目录中。一切正常,我可以在...\Anaconda3\Lib\site-packages\nsp\A 下找到包的所有文件,包括*.pxd 文件。
现在我寻求为extension2 创建一个*.cpp 文件,以便稍后将其打包到第二个包B 中。文件extension2.pxd 读取
from nsp.A.extension cimport mymethod
创建*.cpp 文件的脚本读取
from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy as np
import sys
print(sys.executable)
NAME = 'extension2'
extensions = [Extension(NAME, [NAME+'.pyx'],
include_dirs=[np.get_include()]
)
]
setup(name=NAME,
ext_modules = cythonize(extensions, language="c++",
compiler_directives=compiler_directives),
include_dirs=[np.get_include()]
)
当我使用 python myscript build_ext --inplace 运行此脚本时,我收到一条错误消息,指出缺少 pxd 文件:
from nsp.A.extension cimport mymethod
^
------------------------------------------------------------
.\extension2.pxd:11:0: 'nsp\A\extension.pxd' not found
但是,该文件确实存在。 (sys.executable 是包含已安装包的Anaconda3 文件夹)我该如何解决这个问题?
其他信息
我在 Windows x64 上使用 python 3.7
【问题讨论】:
-
你确定 pip 是正确的 pip 吗? IE。 python3.7的pip而不是python 2?
-
否则检查setup.py中的python路径
-
@ead 我确定我使用的是正确的 Python 安装。我只有一个安装,并且导入编译文件(不是 pxd)效果很好。出于同样的原因,我相信 setup.py 中的路径是正确的。
标签: python cython python-packaging python-extensions cythonize