You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义模块导入失败:Flask项目中UsefulDeveloperTools报错排查

问题描述

我在Flask开发的应用中使用了自行开发的UsefulDeveloperTools包,将其发布到TestPyPI后,在虚拟环境中完成安装。运行main.py时,导入该包的语句抛出ModuleNotFoundError。

包的目录结构

.
├── __init__.py
├── threads.py
└── IDgenerator.py

包的__init__.py代码

"""
Useful Tools.
"""

import threads
import IDgenerator

安装命令

python3 -m pip install --upgrade --index-url https://test.pypi.org/simple/ --no-deps UsefulDeveloperTools

main.py关键代码

import flask
from threading import Thread
import time
import random
import UsefulDeveloperTools # 此处报错
import logging

app=flask.Flask(__name__)
# 无关代码省略

报错信息

(Blog) phao@phao-virtual-machine:~/桌面/pypoj/Blog$ python3 main.py
Traceback (most recent call last):
  File "/home/phao/桌面/pypoj/Blog/main.py", line 5, in <module>
    import UsefulDeveloperTools
  File "/home/phao/桌面/pypoj/Blog/lib/python3.10/site-packages/UsefulDeveloperTools/__init__.py", line 5, in <module>
    import threads
ModuleNotFoundError: No module named 'threads'

虚拟环境已安装包列表

(Blog) phao@phao-virtual-machine:~/桌面/pypoj/Blog$ pip list
Package              Version
-------------------- -------
click                8.1.3
Flask                2.2.2
itsdangerous         2.1.2
Jinja2               3.1.2
Markdown             3.4.1
MarkupSafe           2.1.1
pip                  22.3.1
setuptools           59.6.0
UsefulDeveloperTools 0.2.2
Werkzeug             2.2.2
报错原因

__init__.py中使用了import threads这种绝对导入方式,但当包被安装到Python的site-packages目录后,Python会将UsefulDeveloperTools视为独立命名空间。此时直接import threads会让Python去全局模块路径中查找,而非在UsefulDeveloperTools包内部查找,导致找不到模块。

解决方法

方案1:使用相对导入修改__init__.py

将__init__.py中的导入语句改为相对导入,明确引用包内的子模块:

"""
Useful Tools.
"""

from . import threads
from . import IDgenerator

方案2:使用包前缀的绝对导入

也可以通过包名前缀明确指定模块位置,避免全局查找:

"""
Useful Tools.
"""

# 方式一:保留模块路径引用
import UsefulDeveloperTools.threads
import UsefulDeveloperTools.IDgenerator

# 方式二:直接导入模块到当前命名空间
from UsefulDeveloperTools import threads, IDgenerator

后续操作

修改完__init__.py后,需要重新打包并更新TestPyPI上的包,再在虚拟环境中重新安装:

# 重新打包(需确保已安装build工具)
python3 -m build
# 上传更新后的包到TestPyPI
twine upload --repository testpypi dist/*
# 在虚拟环境中重新安装最新版本
python3 -m pip install --upgrade --index-url https://test.pypi.org/simple/ --no-deps UsefulDeveloperTools

内容的提问来源于stack exchange,提问作者phao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:55:15