Cython 没有这样的文件或目录:Windows 上的“.pyd”错误

Iva*_*mov 7 python cython

我正在尝试从 Cython 教程构建Hello World 示例。我已经编写了 hello.pyx 和 setup.py 文件:

# hello.pyx
def say_hello_to(name):
    print("Hello %s!" % name)
Run Code Online (Sandbox Code Playgroud)
# setup.py
try:
    from setuptools import setup
    from setuptools import Extension
except ImportError:
    from distutils.core import setup
    from distutils.extension import Extension

from Cython.Build import cythonize


setup(
  name='Hello world app',
  ext_modules=cythonize("hello.pyx"),
)
Run Code Online (Sandbox Code Playgroud)

当我跑

python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

copying build\lib.win-amd64-2.7\cython_test\hello.pyd -> cython_test
error: [Errno 2] No such file or directory: 'cython_test\\hello.pyd'
Run Code Online (Sandbox Code Playgroud)

构建过程工作正常,我得到了一个工作hello.pyd文件,但由于某种原因 setup.py 无法将其复制.pyd回工作目录。我该如何解决?

hello.pyx 和 setup.py 文件也可以在BitBucket 上找到

Jos*_*r98 11

希望这对遇到此错误的其他人有用。经过一番挖掘,我的问题是由于__init__.py同一目录中的文件造成的。这个 github 问题突出了潜在的问题。删除后__init__.py,我现在.pyd在目录中获得了正确的文件。


Iva*_*mov 9

我已经解决了这个问题。看来python setup.py命令应该在项目目录之外执行。以下代码工作正常。

cd ..
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)

更新:解决问题的更好方法是指定功能package_dir选项setup

setup(
    name='Hello world app',
    package_dir={'cython_test': ''},
    ext_modules=cythonize("hello.pyx"),
)
Run Code Online (Sandbox Code Playgroud)