如何从项目自定义路径导入modbus_tk Python模块?
解决自定义路径导入modbus_tk的问题
这种情况太常见了——Python默认的模块搜索顺序会优先找site-packages里的标准安装包,咱们可以用下面几种方法让它优先加载你项目里修改后的版本:
方法1:在脚本开头修改sys.path(最推荐)
这是最灵活的方案,不需要改系统环境变量,直接在你的XYZ.py开头加这段代码就行:
import sys import os # 获取当前脚本所在的项目根目录 project_root = os.path.dirname(os.path.abspath(__file__)) # 把项目根目录插到sys.path最前面,让Python优先搜索这里 sys.path.insert(0, project_root) # 现在再导入modbus_tk,就会加载你项目里的自定义版本了 import modbus_tk
原理很简单:Python会按照sys.path里的顺序依次搜索模块,把项目根目录放在最前面,就能让它先找到你修改过的modbus_tk包。
方法2:设置PYTHONPATH环境变量
如果你不想修改代码,可以在运行脚本前设置环境变量,把项目根目录加到Python的搜索路径里:
- Linux/macOS:
export PYTHONPATH=/path/to/Test_project:$PYTHONPATH python XYZ.py - Windows:
set PYTHONPATH=C:\path\to\Test_project;%PYTHONPATH% python XYZ.py
这种方法适合多台机器批量配置,比如把环境变量设置写到启动脚本里,一键运行。
方法3:使用相对导入(注意运行方式)
因为你的XYZ.py和modbus_tk目录都在项目根目录下,且根目录有__init__.py,可以试试相对导入:
from . import modbus_tk
不过要注意:这种方法只在把项目作为一个包导入时生效,如果直接运行XYZ.py(比如python XYZ.py),可能会报错ValueError: attempted relative import in non-package,所以更适合项目内部模块间调用,或者用python -m Test_project.XYZ的方式运行脚本。
额外提醒
- 确保你复制的modbus_tk目录里有
__init__.py文件(原库肯定有,复制的时候别漏了),否则Python不会把它识别为可导入的包。 - 如果之前已经导入过site-packages里的modbus_tk,测试新方法前一定要重启Python解释器,避免模块缓存干扰结果。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

