我觉得问这个问题有点愚蠢,因为有很多类似的问题,但老实说我已经搜索了很多,但找不到解决方案。这里是:
我有一个Python包(在TestPyPi上,here是源代码,注意它使用并需要python3.8),其结构如下:
paillier/
setup.py
test/
paillier/
__init__.py
keygen.py
util/
__init__.py
math_shortcuts.py
我的用例是:在keygen.py
中,我想用util/math_shortcuts.py
.
所以,在 keygen.py
,我有以下导入:
from paillier.util.math_shortcuts import generate_coprime, lcm, get_mu
.
但是,当我尝试使用我的包(通过执行 from paillier.keygen import generate_keys
)时,我收到错误 ModuleNotFoundError: No module named 'paillier.util'
。
当我使用pip
安装它时,这个ModuleNotFoundError总是存在来自TestPyPi
,但是当我在本地构建包时不会发生这种情况:当我运行 pip install -e .
时在 paillier/
目录(setup.py
所在的位置),我可以运行 from paillier.keygen import generate_keys
,即使我的工作目录在其他地方。
我尝试过from .util.math_shortcuts ...
,或from util.math_shortcuts ...
,或from paillier.paillier.util.math_shortcuts ...
,但一切都无济于事。
简而言之,当做pip install --index-url <TestPyPi> rens-paillier
时我的文件似乎找不到子模块。
然而,当做pip install -e .
时在外paillier/
dir,它似乎有效。
最佳答案
我也遇到了同样的问题。 (我的 -e 安装有效,正常安装无效)我的解决方案是,在 setup.py 中实际命名子包。
packages=['paillier', 'paillier.util']
虽然这有效,但我不确定为什么:D
关于python - 在包内找不到子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249207/