首页 > 解决方案 > 在包中找不到子模块

问题描述

我觉得问这个有点愚蠢,因为有很多类似的问题,但老实说,我已经搜索了很多,找不到解决方案。开始:

我有一个 Python 包(在TestPyPi上,这里是源代码,注意它使用并需要 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当我使用from安装它时,这个 ModuleNotFoundError 总是存在TestPyPi,但是当我在本地构建包时它不会发生:当我pip install -e .paillier/目录(所在的位置setup.py)中运行时,我可以运行from paillier.keygen import generate_keys,即使我的工作目录在其他地方。

我尝试过from .util.math_shortcuts ..., or from util.math_shortcuts ..., or from paillier.paillier.util.math_shortcuts ..., 但都无济于事。


简而言之,在做pip install --index-url <TestPyPi> rens-paillier我的文件时似乎找不到子模块。
但是,pip install -e .在外部paillier/目录中执行时,它似乎可以工作。

标签: pythonpython-3.xpython-importmodulenotfounderror

解决方案


我遇到了同样的问题。(我的 -e 安装有效,正常安装没有)我的解决方案是,在 setup.py 中实际命名子包。

packages=['paillier', 'paillier.util']

虽然这有效,但我不知道为什么:D


推荐阅读