描述
python在用pycharm的时候可以通过 " Project右键选项 >> Mark Directory as >> Sources Root " 来指定当前项目的根路径,从而避免掉包找不到对应路径的问题;但是在命令行运行的时候,不能像IDE一样直接指定项目根路径,就需要在程序开始进行手动添加。
目录结构:
main.py 的内容是:
from test_a import test_a
test_a.a()
print('ok')
main 文件夹存放的也是 main.py ;
test_a 中存放的是 test_a.py ,内容是:
def a():
print('a')
问题
直接在当前路径命令行运行 python main.py,没有问题,即已指定当前路径为根路径;
但是使用相对路径运行 python main/main.py ,报错:
Traceback (most recent call last):
File "main/main.py", line 15, in <module>
from test_a import test_a
ModuleNotFoundError: No module named 'test_a'
相对路径已经更改了根路径,还想使用其他的根路径就需要重新设置。
解决
关于不同级文件调用出现 “ No module named ‘XXX’ ” 的问题,尝试了网上提供加入 _init_ 文件的方法,这种方法也只是告诉python这是个包,并且可以在这里边初始化整个包的一些信息,未能解决当前问题。
最后通过打印当前项目路径发现了问题。
def get_project_path():
"""得到项目路径"""
project_path = os.path.join(os.path.dirname(__file__),"..",)
return project_path
path = get_project_path()
print(path) # 得到项目的根目录路径
根目录路径输出是“ main/…”,即通过相对路径已经给项目的根路径做了设置,要再想调用其他文件的包,就得重新设置项目路径,参考添加根目录的方法:
https://blog.csdn.net/weixin_40546602/article/details/111579500
在 main/main.py 开头添加
import sys
sys.path.insert(0, '.') # 直接添加
即可。
总之
一直在用 pycharm 写 python,离开 pycharm 的傻瓜式操作,都忘了 python 本身的运行过程就是寻根,然后层层执行调用。
以后遇到“ No module named ‘XXX’ ”,除去需要调用的官方包,自己写的包就先观察一下需要调用的文件是否处于同一根目录下。