首页 > 解决方案 > ImportError:没有模块命名无法在python中导入模块的顶级目录

问题描述

我的目录结构:

├── common
│   ├── common.py
│   └── __init__.py
├── project1
│   ├── __init__.py
│   └── scripts
│       ├── example_import.py
│       └── __init__.py
└── project2
    ├── __init__.py
    └── scripts
        └── __init__.py

我需要在 project1/scripts/example_import.py 文件中导入 common/common.py 模块

example_import.py:

import sys
sys.path.append("../common")
from common import Test
print("Module Not import error")

错误:

Traceback (most recent call last):
  File "project1/scripts/example_import.py", line 3, in <module>
    from common import Test
ImportError: No module named common

如何解决问题?

标签: pythonpython-3.x

解决方案


一开始要了解 Python 导入的工作原理是很棘手的,但一旦你了解了如何进行,就会变得有意义。

有不同的方法可以解决您的导入问题。我不建议搞砸sys.path。根据您调用脚本的位置,您有多种选择。

您的目录结构。

├── common
│   ├── common.py
│   └── __init__.py
├── project1
│   ├── __init__.py
│   └── scripts
│       ├── example_import.py
│       └── __init__.py
└── project2
    ├── __init__.py
    └── scripts
        └── __init__.py

在目录的根目录

python project1/scripts/example_import.py 

假设 example_import.py 中的导入看起来像

from common.common import Test

如果你想使用from common import Test,你需要在公共文件夹中添加 from common.common import Test文件__init__.py

您还可以使用PYTHONPATH环境变量告诉 Python 在哪里寻找基本模块。

PYTHONPATH=/pathto/basefolder python folder/filesx.py

另一种方法是创建一个setup.py基础并python -m pip install --editable . 在您正在处理的环境上进行开发安装。

示例setup.py


#!/usr/bin/env python

from distutils.core import setup

setup(name='projectX',
      version='1.0',
      description='The World is not Enoug',
      author='James Bond',
      author_email='agent@007.net',
      url='https://www.python.org/sigs/distutils-sig/',
      packages=['common', 'project1', 'project2],
     )

有关更多 setup.py 选项,请参阅Python 文档


推荐阅读