微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我构建了一个python包并上传到pypi可以安装但不能导入:ModuleNotFoundError

如何解决我构建了一个python包并上传到pypi可以安装但不能导入:ModuleNotFoundError

我构建了一个 python 包并上传pypi。它安装得很好,但是在导入时出现 ModuleNotFound 错误。该错误在全新的 conda 环境中复制,在不同的机器上(Ubuntu、MacOS、Windows。虽然都在(新)conda 环境中)。我最后一次出现此错误是因为文件夹命名不正确,但这里并非如此。 GitHub repo 在用于构建 whl 的分支和文件夹中。

有什么想法吗?

使用

构建和安装包
python3 -m build
python3 -m twine upload dist/*
pip install pillaralgos
(pillar_env) jupyter-pomkos@jupyterubuntu:~$ python
Python 3.8.8 (default,Feb 24 2021,21:46:12) 
[GCC 7.3.0] :: Anaconda,Inc. on linux
Type "help","copyright","credits" or "license" for more information.
---------------------------------------------------------------------------
>>> import pillaralgos
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
ModuleNotFoundError: No module named 'pillaralgos'
>>> 

它出现在 pip list

(pillar_env) jupyter-pomkos@jupyterubuntu:~$ pip list
Package            Version
------------------ -------------------
# Truncated
pexpect            4.8.0
pickleshare        0.7.5
pillaralgos        1.0.1
Pillow             8.2.0
pip                21.0.1

sys.path 确实包含安装库的目录。

(pillar_env) jupyter-pomkos@jupyterubuntu:~$ python
Python 3.8.8 (default,"credits" or "license" for more information.
>>> import sys
>>> sys.path
['','/home/jupyter-pomkos/.conda/envs/pillar_env/lib/python38.zip','/home/jupyter-pomkos/.conda/envs/pillar_env/lib/python3.8','/home/jupyter-pomkos/.conda/envs/pillar_env/lib/python3.8/lib-dynload','/home/jupyter-pomkos/.local/lib/python3.8/site-packages','/home/jupyter-pomkos/.conda/envs/pillar_env/lib/python3.8/site-packages']
>>> 

pip show 表示它安装在正确的环境和目录中。

(pillar_env) jupyter-pomkos@jupyterubuntu:~$ pip show pillaralgos
---------------------------------------------------------------------------
Name: pillaralgos
Version: 1.0.1
Summary: Algorithms for Pillar. Currently includes "mini" algorithms,nothing too sophisticated.
Home-page: https://github.com/pillargg/twitch_chat_analysis/tree/pypi_reorganize
Author: Peter Gates
Author-email: pgate89@gmail.com
License: UNKNowN
Location: /home/jupyter-pomkos/.conda/envs/pillar_env/lib/python3.8/site-packages
Requires: 
required-by: 
Note: you may need to restart the kernel to use updated packages.

ModuleNotFoundError 出现在 jupyter 控制台、jupyterlab notebook 和终端 python 中。确认内核指向正确的 conda 目录(虽然我认为这个故障排除没有必要,因为错误是在不同的机器上复制的):

(pillar_env) jupyter-pomkos@jupyterubuntu:~$ nano ~/.local/share/jupyter/kernels/pillar_env/kernel.json
---------------------------------------------------------------------------
{
 "argv": [
  "/home/jupyter-pomkos/.conda/envs/pillar_env/bin/python","-m","ipykernel_launcher","-f","{connection_file}"
 ],"display_name": "Pillar Env","language": "python"
}

解决方法

您当前的 setup.cfg 如下所示:

[options]
package_dir =
    = pillaralgos
packages = find:
# ...

[options.packages.find]
where = pillaralgos

将此与您的项目目录结构进行比较,在我看来您应该更改为这样的内容:

[options]
packages = find:
# ...

如果我没记错的话,package_dir 字段以及整个 [options.packages.find] 部分都不是必需的。

,

切换到 poetry 以进行所有包构建/发布,他们似乎直截了当。

说是使用 python 的内置 python3 -m buildpython twine upload dist/* 命令运行:

  • 确保本地和 github 上的所有文件夹都包含 __init__.py
  • 确保文件夹结构正确

默认 python 命令的文件夹结构应该是:

|-- pypi
     |-- src  # <---- this folder can be named pillaralgos,but still needed another pillaralgos subfolder
          |-- pillaralgos  # <----- this is needed
               |-- helpers
                    |-- __init__.py
                    |-- data_handler.py
               |-- __init__.py
               |-- algoXX.py
     |-- LICENSE
     |-- pyproject.toml
     |-- README.md
     |-- setup.cfg

poetry 开箱即用。文件夹结构:

|-- pypi
    |-- pillaralgos  # <---- note that poetry didn't require an additional subfolder
        |-- helpers
            |-- __init__.py
            |-- data_handler.py
            |-- graph_helpers.py
            |-- sanity_checks.py
        |-- __init__.py  # must include version number
        |-- algoXX.py  # all algorithms in separate files
    |-- LICENSE
    |-- README.md
    |-- pyproject.toml  # must include version number

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。