【发布时间】:2017-10-06 11:26:30
【问题描述】:
我正在尝试构建一个同时使用 python 和 cython 模块的包。我在构建和安装后处理导入的问题,我不确定如何从构建过程生成的.so 文件导入文件。
在构建之前我的文件夹结构是这样的
root/
├── c_integrate.c
├── c_integrate.pyx
├── cython_builder.py
├── __init__.py
├── integrator_class.py
├── integrator_modules
│ ├── cython_integrator.py
│ ├── __init__.py
│ ├── integrator.py
│ ├── numba_integrator.py
│ ├── numpy_integrator.py
│ ├── quadratic_error.png
│ ├── report3.txt
│ ├── report4.txt
│ └── report5.txt
├── report6.txt
├── setup.py
└── test
├── __init__.py
└── test_integrator.py
使用python3.5 setup.py build 构建会在root 中提供这个新文件夹
root/build/
├── lib.linux-x86_64-3.5
│ ├── c_integrate.cpython-35m-x86_64-linux-gnu.so
│ ├── integrator_modules
│ │ ├── cython_integrator.py
│ │ ├── __init__.py
│ │ ├── integrator.py
│ │ ├── numba_integrator.py
│ │ └── numpy_integrator.py
│ └── test
│ ├── __init__.py
│ └── test_integrator.py
setup.py 文件如下所示
from setuptools import setup, Extension, find_packages
import numpy
setup(
name = "integrator_package",
author = "foo",
packages = find_packages(),
ext_modules = [Extension("c_integrate", ["c_integrate.c"])],
include_dirs=[numpy.get_include()],
)
然后我的问题是:如何将函数的导入语句从 .so 文件写入位于 build 目录中的 root 和 cython_integrator 和 test_integrator 中的 ìntegrator_class.py 中。附加到sys.path 似乎是一个我不太喜欢的快速而肮脏的解决方案。
编辑:
正如 cmets 中指出的那样,我尚未安装该软件包。这是因为我不知道写什么要从.so 文件中导入
【问题讨论】:
-
this 相关吗?
-
似乎您没有像@DavidW 指出的那样安装您构建的软件包。发出
pip install path/to/root/或pip install --editable=path/to/root/以将构建的文件与python 结合。 -
是的,我还没有安装它——但我的问题是,由于
.so文件被命名为特定于平台的文件,我不知道如何导入它。特别是因为lib.linux...文件夹没有__init__.py文件。另外:在我安装并尝试重命名.so文件并导入它之后,它会引发SystemError: Parent module '' not loaded, cannot perform relative import
标签: python packages cython setuptools