python-模块导入的最佳方案
文章目录
#python #依赖管理
配置全局工具库
比如现在我有一个工具库:fish_util:
- /Users/yutianran/MyGithub/fish_util
- test
- test_log_util.py
- test_allure.py
- init.py
- test_decorator_util.py
- src
- internal_var.py
- log_util.py
- init.py
- decorator_util.py
- content_format.py
- tree_util.py
- common_op.py
- init.py
- README.md
- .gitignore
- main.py
- start_pytest.sh
- test
那么,./test/test_log_util.py中如何调用./src/log_util.py呢?
一般来说,可能是这3种方案:
- 在test_log_util中加sys.path.append加路径
- 在test_log_util中通过相对导入..src.log_util的方式来导包
- 将/Users/yutianran/MyGithub/fish_util添加到PYTHONPATH的环境变量
但是这3种方案都有缺点:
- 第1种要在每一个测试文件都加,太麻烦了
- 第2种的话,运行main.py可以正常执行,直接运行test_log_util.py会报错:ImportError: attempted relative import with no known parent package
- 第3种呢,以后每一个python项目中这种同一项目中不同模块互相导入都得加入环境变量么?那环境变量得加多少呀。
综合考虑,我觉得最佳解决方案是这样的:
- 将/Users/yutianran/MyGithub这个项目的父路径加入到PYTHONPATH的环境变量中
- 在每个项目根路径下都加上__init__.py,以后无论是项目内部还是项目外部,都是通过
from fish_util.src import log_util
来引用,保持一致性
那如果有的项目不在/Users/yutianran/MyGithub这个路径下面呢?那就用软链接呗。通过软链接将/Users/yutianran/Documents/MyApp映射到到/Users/yutianran/MyGithub目录下:
|
|
或者映射到/Users/yutianran/anaconda3/lib/python3.11/site-packages目录下也行
文章作者 fishyer
上次更新 2024-05-14 (3120490)
笔记链接 obsidian://advanced-uri?vault=note&uid=9e840039-9d01-4eee-b2de-e97c754b9ec7
文章链接 https://blog.fishyer.com/post/9e840039-9d01-4eee-b2de-e97c754b9ec7/
许可协议 CC BY-NC-ND 4.0