[英]ModuleNotFound when trying to install Python Extension Module (Cython) inside the same package specified in setup.py
我有一個 Python 項目的 Cython 擴展模塊,我想安裝到與安裝項目相同的命名空間。 當我嘗試在擴展中指定將其安裝在包本身中時,無法找到並導入它。 如果我指定擴展名在 Python 命名空間的根目錄中,它可以正常工作,但它不在我想要的模塊命名空間中。 如何從與包本身相同的命名空間導入擴展模塊?
我為這個問題做了一個簡單的測試用例。
文件夾結構:
mypkg
├── foo
│ ├── __init__.py
│ └── barCy.pyx
└── setup.py
.barCy.pyx
文件:
cpdef long bar():
return 0
setup.py
代碼:
import distutils.extension
from Cython.Build import cythonize
from setuptools import setup, find_packages
extensions = [distutils.extension.Extension("foo.bar",
['foo/barCy.pyx'])]
setup(
name='foo',
packages=find_packages(),
ext_modules=cythonize(extensions),
)
__init.py__
是空的。
我希望能夠做到:
>>> import foo.bar as bar
>>> bar.bar()
0
相反,我得到
>>> import foo.bar as bar
ModuleNotFoundError: No module named 'foo.bar'
如果我將Extension("foo.bar",...
更改為Extension("bar",...
,那么我可以像頂級包一樣import bar
。雖然這是預期的行為,但它是不是我想要的,因為我只希望可以通過foo
命名空間訪問此擴展模塊。
我的 Python 解釋器是從與setup.py
腳本相同的文件夾中運行的,因此執行import foo
是導入本地包,而不是安裝在 Python 解釋器的site-packages
目錄中site-packages
。 由於它們具有相同的文件夾結構,因此選擇本地目錄作為替代的導入包。
從與源不同的文件夾進行測試/運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.