首页 > 解决方案 > 无法安装使用 entry_points、ModuleNotFoundErrors 的本地开发的 python 包

问题描述

概括

我有一个 python 程序,我可以在 PyCharm 中顺利运行,但是当我使用我在中指定的控制台脚本入口点运行pip install .pip install -e .从 venv 中运行时,setup.py我不断收到 ImportErrors 或 ModuleNotFoundErrors。

我认为问题在于我如何导入我的模块,或者我不理解的 setuptools 的一些后台过程。我尝试了多种从主模块中导入其他模块的方法,但我最接近它的工作方式是能够正常运行pip install -e .pip install .从来没有工作过。

这是我的第一个项目,我尝试打包 python 发行版以学习如何执行此操作,所以我觉得我可能缺少一些简单的东西。在过去的 4 天里,我一直在尝试调试这个问题,并且我已经阅读了无数的资源。任何帮助或建议将不胜感激。

此外,任何关于调试像这样构建的发行版的正常过程的建议都会很棒。由于使用 IDE,您可以设置断点并遍历代码,但是当您安装发行版时,您无法调试任何内容。

链接:

GitHub

具体错误:

跑步pip install --upgrade --force-reinstall -e .

使用的命令:diagnet summary

(env) PS C:\Users\sammy\Documents\Projects\Diagnet\Diagnet> diagnet summary
Traceback (most recent call last):
  File "C:\Users\sammy\Documents\Projects\Diagnet\Diagnet\env\Scripts\diagnet-script.py", line 33, in <module>
    sys.exit(load_entry_point('diagnet', 'console_scripts', 'diagnet')())
  File "C:\Users\sammy\Documents\Projects\Diagnet\Diagnet\env\Scripts\diagnet-script.py", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "C:\Python39\lib\importlib\metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "C:\Python39\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'src'

跑步pip install --upgrade --force-reinstall .

使用的命令:diagnet summary

(env) PS C:\Users\sammy\Documents\Projects\Diagnet\Diagnet> diagnet summary
c:\users\sammy\documents\projects\diagnet\diagnet\env\scripts\python.exe: can't find '__main__' module in 'C:\\Users\\sammy\\Documents\\Projects\\Diagnet\\Diagnet\\env\\Scripts\\diagnet.exe'

目录结构

Diagnet
├── LICENSE
├── README.md
├── pyproject.toml
├── requirements.txt
├── setup.py
└── src
    ├── __init__.py
    └── diagnet
        ├── __init__.py
        ├── entry.py
        ├── summary.py
        └── utils
            ├── __init__.py
            └── helpers.py

进口用于summary.py

from utils import network_arping, get_current_network, get_current_ip, get_hostname
from prettytable import PrettyTable
import time

进口用于entry.py

import argparse
from summary import Summary

进口用于utils/__init__.py

from .helpers import get_current_ip
from .helpers import get_current_network
from .helpers import get_current_mac
from .helpers import network_arping
from .helpers import get_hostname

相关setup.py内容

package_dir={'': 'src'},
packages=find_packages(where='src'),
python_requires=">=3.6",
entry_points={
      'console_scripts': [
            'diagnet=src.diagnet.entry:main',
      ],
}

标签: pythonpip

解决方案


推荐阅读