python - 无法安装使用 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,您可以设置断点并遍历代码,但是当您安装发行版时,您无法调试任何内容。
链接:
具体错误:
跑步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',
],
}
解决方案
推荐阅读
- css - 如何清理大量重复的“Nth-Of-Type”CSS 选择器?
- arrays - 在大于所加整数的整数之后添加一个整数。然后将新添加的 1 位置之后的每个元素向右移动
- python - TypeError:不支持的操作数类型 -:'float' 和 'datetime.datetime'
- flutter - Flutter - 如何查找连接到移动热点的设备的 IP
- javascript - javascript饼图不显示
- pytorch-lightning - Pytorch 嵌入对于 GPU 来说太大但适合 CPU
- python - 使用 Keras 和 Python 创建 NER 模型
- java - int 值无法正确转换为 double
- python - 如何使用 PyTorch 快速反转排列?
- python - 谁能解释一下这条线的复杂性?