假设我有一个如下结构的 python 包:
foo/
__init__.py
setup.py
bar/
__init__.py
bar.pyx
Run Code Online (Sandbox Code Playgroud)
的内容setup.py是
from distutils.core import setup
from Cython.Build import cythonize
import numpy as np
setup(
ext_modules=cythonize("bar/bar.pyx"),
include_dirs=[np.get_include()]
)
Run Code Online (Sandbox Code Playgroud)
然后我就跑
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
因为我需要将编译后的文件bar.so准确放置在bar/. 但是前面的命令foo/bar/在 下创建了一个新目录bar,并放在bar.so那里,比如说,
foo/
__init__.py
setup.py
bar/
__init__.py
bar.pyx
foo/
bar/
bar.so
Run Code Online (Sandbox Code Playgroud)
而我需要的是
foo/
__init__.py
setup.py
bar/
__init__.py
bar.pyx
bar.so
Run Code Online (Sandbox Code Playgroud)
这些烦人的事情发生在我转身foo成为bar一个包裹之后。如果我删除foo/__init__.py然后会出现在,仍然不会bar/__init__.py。我已阅读手册,但没有找到解决此问题的选项。bar.sofoo/foo/bar/
那么如果我要求bar.so出现在正确的位置,同时保留这两个__init__.py文件该怎么办呢?
我试图在 Windows 上编译 Cython 文件 (.pyx),这是我刚从 .py 保存的文件。这是我的项目目录路径。
c:\..\Project\App\Analyzer\
_init_.py
Few_other_files.py
consolidated_loop_C.pyx
cl_setup.py
Run Code Online (Sandbox Code Playgroud)
这是我的 cl_setup.py
from Cython.Build import cythonize
try:
from setuptools import setup
from setuptools import Extension
except ImportError:
from distutils.core import setup
from distutils.extension import Extension
setup(
name = "Consolidated Loop",
ext_modules = cythonize("consolidated_loop_C.pyx")
)
Run Code Online (Sandbox Code Playgroud)
我正在使用以下语句在同一文件夹中进行编译。
python cl_setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误。我的猜测是我缺少 cythonize() 的某些参数,试图在没有任何运气的情况下进行研究。