关于python import的路径问题

Posted 詩和遠方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于python import的路径问题相关的知识,希望对你有一定的参考价值。

模块(python module)就是一个python文件,包(package)就是一个带__init__.py文件的文件夹,可以理解为模块的集合。
假设项目项目如下:

Project
    │  app_1.py
    │  app_2.py
    │
    ├─common
    │      module_1.py
    │      module_2.py
    │      __init__.py
    │
    └─test
            test_1.py
            test_2.py

在module_2.py中引用module_1.py

from module_1 import class_a

然后直接通过python.exe运行module_1.py,一切正常。
但在app_1.py中引用module_1.py后执行app_1.py却会提示找不到模块module_1。
后改为

from common.module_1 import xxx

app_1.py运行正常,但运行module_1.py提到找不到模块common。
还真是按下葫芦浮起瓢呢,让人感觉相当困惑,更加让人震惊的是以上两种情况在vscode下会再现,但通过pycharm运行则一切正常。
这是因为pycharm默认将要运行的py文件所在目录以及项目根目录加入到sys.path中了。

后查询了相关资料后,发现相对引用容易出错,所以为自己定下一个规则,尽量用从Package根目录开始的绝对引用,就当前例子而言就是从common开始。

若要执行package里的module进行测试,可换种方式进行运行:

  • 方式一: 新建一个py文件然后对其进行引用后执行,若py文件不在项目目录下,可在import前加上:
import sys
sys.path.append('your_project_path')
from common.module_1 import xxx

若担心模块名称同名,希望保证引用的是正确的模块,可将append操作改为insert: sys.path.insert(0, 'your_project_path')

  • 方式二:在Project目录下用执行模块的方式运行:
python -m common.module_1

注意不要加.py后缀名

以上是关于关于python import的路径问题的主要内容,如果未能解决你的问题,请参考以下文章

关于python import的路径问题

关于python import的路径问题

关于from . import 的一个问题

关于Python3的import问题(pycharm可以运行,命令行import错误)

迭代测试

ImportError: cannot import name ‘xxx‘ from ‘xxx‘关于python导包的问题