相关疑难解决方法(0)

命令 `python setup.py build_ext --inplace` 总是创建一个新目录

假设我有一个如下结构的 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文件该怎么办呢?

python cython setup.py python-2.7

2
推荐指数
1
解决办法
7795
查看次数

Cython 编译错误“不是有效的模块名称”

我试图在 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() 的某些参数,试图在没有任何运气的情况下进行研究。

在此处输入图片说明

python compilation cython

1
推荐指数
1
解决办法
5463
查看次数

标签 统计

cython ×2

python ×2

compilation ×1

python-2.7 ×1

setup.py ×1