不同路径下导入自己的文件
一、错误示范
在测试项目内。目录结构如下:
在这里,假设我们想在utils/app_loadimg中使用test/test_import.py中的pass_test变量
测试代码如下:
# test/test_import.py代码
pass_test = "测试成功"
# utils/app_loadimg.py的代码
from Img2Web.test.test_import import pass_test
print(pass_test)
在pycharm中导入是正常的,输出结果为:
测试成功
在CMD中、app_loadimg.py所在目录下执行文件:
Traceback (most recent call last):
File "app_loadimg.py", line 8, in
from Img2Web.test.test_import import pass_test
ModuleNotFoundError: No module named 'Img2Web'
在CMD中、app_loadimg.py父目录下执行文件:
Traceback (most recent call last):
File "app_loadimg.py", line 8, in
from Img2Web.test.test_import import pass_test
ModuleNotFoundError: No module named 'Img2Web'
备注
不难发现,在这些脚本中运行文件就报错了,这种导入方式肯定会有问题
二、正确的姿势
import os
import sys
sys.path.append(os.path.abspath(__file__).split("Img2Web")[0])
from Img2Web.test.test_import import pass_test
使用sys.path.append()将Img2Web的目录添加到环境变量里,就可以在任意地址执行了。需要注意的是sys.path.append()必须先执行,但是在pycharm里会显示PEP8格式有问题,这里没有办法只能取舍了!