我試圖構建一個使用python和cython模塊的包。在構建和安裝之後,我遇到了導入問題,我不確定如何從構建過程生成的.so
文件中導入文件。使用cython擴展打包python
之前建設我的文件夾結構看起來像這樣
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
似乎是一個我不太喜歡的快速和骯髒的解決方案。
編輯: 正如在評論中指出,我還沒有安裝軟件包。這是因爲我不知道寫什麼從.so
文件
是[this](https://stackoverflow.com/questions/19048732/python-setup-py-develop-vs-install)有關嗎? – DavidW
好像你沒有像@DavidW指出的那樣安裝你製作的軟件包。發出'pip安裝路徑/ to/root /'或'pip install --editable = path/to/root /'來與使用python建立的文件結婚。 – hoefling
是的,我沒有安裝它 - 但我的問題是,因爲'.so'文件被命名爲特定於平臺,我不知道如何導入它。特別是因爲'lib.linux ...'文件夾沒有'__init __。py'文件。有意思的是:在我安裝後,只是嘗試重命名'.so'文件並導入它引發'SystemError:父模塊''未加載,不能執行相對導入 ' – Copperwire