在包中找不到子模块
Can't find submodule within package
我问这个问题有点傻,因为有很多类似的问题,但老实说,我已经搜索了很多,但找不到解决方案。这里是:
我有一个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'
当我使用 TestPyPi
中的 pip
安装它时,这个 ModuleNotFoundError 总是存在,但是当我在本地构建包时它不会发生:当我 运行 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
我的文件似乎找不到子模块。
但是,在外部 paillier/
目录中执行 pip install -e .
时,它似乎有效。
我运行陷入同样的问题。 (我的 -e 安装有效,正常安装没有)我的解决方案是,实际命名 setup.py.
中的子包
packages=['paillier', 'paillier.util']
虽然这有效,但我不确定为什么 :D
寻找相同的问题(credits to this post),最简单的可能是使用
setuptools.find_packages()
一些可选参数:
where="src"
用于文件位于 src/
中的包结构
exclude=["*-old"]
排除一些包(在我的例子中,我想保留 my_package-old
直到我的重构完成)
我发现从 setup.py 文件中的 setup
函数调用中删除 packages
参数解决了我的模块未解析子模块时遇到的类似问题。
我问这个问题有点傻,因为有很多类似的问题,但老实说,我已经搜索了很多,但找不到解决方案。这里是:
我有一个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'
当我使用 TestPyPi
中的 pip
安装它时,这个 ModuleNotFoundError 总是存在,但是当我在本地构建包时它不会发生:当我 运行 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
我的文件似乎找不到子模块。
但是,在外部 paillier/
目录中执行 pip install -e .
时,它似乎有效。
我运行陷入同样的问题。 (我的 -e 安装有效,正常安装没有)我的解决方案是,实际命名 setup.py.
中的子包packages=['paillier', 'paillier.util']
虽然这有效,但我不确定为什么 :D
寻找相同的问题(credits to this post),最简单的可能是使用
setuptools.find_packages()
一些可选参数:
where="src"
用于文件位于src/
中的包结构
exclude=["*-old"]
排除一些包(在我的例子中,我想保留my_package-old
直到我的重构完成)
我发现从 setup.py 文件中的 setup
函数调用中删除 packages
参数解决了我的模块未解析子模块时遇到的类似问题。