簡體   English   中英

在 package 中找不到子模塊

[英]Can't find submodule within package

我覺得問這個有點愚蠢,因為有很多類似的問題,但老實說,我已經搜索了很多,找不到解決方案。 開始:

我有一個 Python package (在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
但是,當我嘗試使用我的 package (通過from paillier.keygen import generate_keys執行)時,我收到了錯誤ModuleNotFoundError: No module named 'paillier.util'

當我使用來自pipTestPyPi安裝它時,這個 ModuleNotFoundError 總是存在,但是當我在本地構建 package 時它不會發生:當我運行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/目錄中,它似乎有效。

我遇到了同樣的問題。 (我的 -e 安裝有效,正常安裝沒有)我的解決方案是,在 setup.py 中實際命名子包。

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

雖然這有效,但我不確定為什么:D

環顧四周尋找相同的問題( 這篇文章的學分),最簡單的可能是使用

setuptools.find_packages()

一些可選的 arguments:

  • where="src"用於 package 結構,其中文件位於src/
  • exclude=["*-old"]排除一些包(在我的情況下,我想保留的my_package-old直到我的重構完成)

我發現從 setup.py 文件中的setup function 調用中刪除packages參數解決了與我的模塊未解析子模塊類似的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM