使用cython扩展打包python
我正在尝试构建一个同时使用python和cython模块的包。我遇到的问题是在构建和安装之后的导入,我不确定如何从构建过程生成的使用cython扩展打包python,python,packages,cython,setuptools,Python,Packages,Cython,Setuptools,我正在尝试构建一个同时使用python和cython模块的包。我遇到的问题是在构建和安装之后的导入,我不确定如何从构建过程生成的文件导入文件 在构建我的文件夹结构之前,如下所示 root/ ├── c_integrate.c ├── c_integrate.pyx ├── cython_builder.py ├── __init__.py ├── integrator_class.py ├── integrator_modules │ ├── cython_integrator.py │
文件导入文件
在构建我的文件夹结构之前,如下所示
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/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
文件写入根和cython\u integrator
目录中的integrator\u class.py
和test\u integrator
中。附加到sys.path
似乎是一个我不太喜欢的快速而肮脏的解决方案
编辑:
正如评论中指出的,我还没有安装这个软件包。这是因为我不知道要从导入什么。因此
文件没有特定顺序:
文件setup.py通常位于项目根目录下。例如:
library_name/
__init__.py
file1.py
setup.py
README
然后,生成目录出现在项目源旁边,而不是项目源中
要在Python中导入文件c_integrate.cpython-35m-x86_64-linux-gnu.so,只需导入“c_integrate”。命名的其余部分将自动处理,因为它只是平台信息。看
一个有效的模块是
带有modulename/\uuuuu init\uuuuu.py
文件的目录
名为modulename.py的文件
名为modulename.PLATFORMINFO.so的文件
当然位于Python路径中。因此,对于已编译的Cython模块,不需要\uuuu init\uuuu.py
文件
对于您的情况,请在项目目录中移动Cython代码,然后执行相对导入import.c\u integrate
或从integrator\u模块导入完整的,后者仅在安装软件包时起作用
其中一些信息可以在我关于Cython模块的博客文章中找到
我相信,这应该让你建立一个适当的包,评论下面如果没有
编辑:要完成配置(请参见下面的注释),海报也会
修复了setup.py文件中的模块路径,使其成为从PYTHONPATH:扩展名(“integrator\u package.integrator\u modules.c\u integrat”)开始的完整模块名或者“,[“integrator\u package/integrator\u modules/c\u integrator.c”]
而不是扩展(“c\u integrate”,[“c\u integrate.c”])]
对模块进行Cythonize、构建并与同一个Python解释器一起使用
进一步说明:setup.py文件也可以对文件进行cythonize。将.pyx
文件而不是.c
文件作为源文件
cythonize(Extension('integrator_package.integrator_modules.c_integrator',
["integrator_package/integrator_modules/c_integrator.pyx"],
include_dirs=[numpy.get_include()]))
没有具体顺序:
文件setup.py通常位于项目根目录下。例如:
library_name/
__init__.py
file1.py
setup.py
README
然后,生成目录出现在项目源旁边,而不是项目源中
要在Python中导入文件c_integrate.cpython-35m-x86_64-linux-gnu.so,只需导入“c_integrate”。其余命名将自动处理,因为它只是平台信息。请参阅
一个有效的模块是
带有modulename/\uuuuu init\uuuuu.py
文件的目录
名为modulename.py的文件
名为modulename.PLATFORMINFO.so的文件
当然位于Python路径中。因此,对于已编译的Cython模块,不需要\uuuu init\uuuu.py
文件
对于您的情况,请在项目目录中移动Cython代码,然后执行相对导入import.c\u integrate
或从integrator\u模块导入完整的,后者仅在安装软件包时起作用
其中一些信息可以在我关于Cython模块的博客文章中找到
我相信,这应该让你建立一个适当的包,评论下面如果没有
编辑:要完成配置(请参见下面的注释),海报也会
修复了setup.py文件中的模块路径,使其成为从PYTHONPATH:扩展名(“integrator\u package.integrator\u modules.c\u integrat”)开始的完整模块名或者“,[“integrator\u package/integrator\u modules/c\u integrator.c”]
而不是扩展(“c\u integrate”,[“c\u integrate.c”])]
对模块进行Cythonize、构建并与同一个Python解释器一起使用
进一步说明:setup.py文件也可以对文件进行cythonize。将.pyx
文件而不是.c
文件作为源文件
cythonize(Extension('integrator_package.integrator_modules.c_integrator',
["integrator_package/integrator_modules/c_integrator.pyx"],
include_dirs=[numpy.get_include()]))
相关吗?似乎你没有像@DavidW指出的那样安装你构建的包。问题pip install path/to/root/
或pip install--editable=path/to/root/
将构建的文件与python结合起来。是的,我还没有安装它-但我的问题是,既然。所以文件被命名为特定于平台的,我不知道现在如何导入它。特别是由于lib.linux…
文件夹没有\uuuu init\uuuu.py
文件。另外:在我安装后,只需尝试重命名。因此
文件并导入它会引发系统错误:父模块“”未加载,无法执行相对导入
相关吗?似乎您没有安装你像@DavidW那样构建的包指出。问题pip install path/to/root/
或pip install--editable=path/to/root/
为了将构建的文件与python结合起来。是的,我还没有安装它-但我的问题是,由于文件被命名为特定于平台的文件,我不知道如何导入它。特别是自从elib.linux…
文件夹没有\uuuuu init\uuuuuu.py
文件