python - 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
如何解决问题?
解决方案
一开始要了解 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 文档。
推荐阅读
- r - 在 R 中,如何自动检测首次出现非标准时差的位置?
- c++ - 循环内的变量被设置为下一个数组的元素是否始终具有相同的内存地址?
- javascript - 如何在 cypress 中将 csv 转换为 JSON
- javascript - 如何使 Jest spOn 第二次调用函数
- html - 具有不同高度的内联块元素内的间隙
- javascript - 了解如何将 ._forEach 变成 _.map
- java - 如何在 java/hibernate/mysql 中加入 2 个或更多表?
- c - 有没有更好的方法从 C 语言的控制台中接受结构中的用户全名?
- javascript - 使用 js 中的正则表达式删除某些区域的引号
- c#-4.0 - 这个错误怎么可能?使用 Imazen.WebP.SimpleDecoder '检测到无效的 WebP 标头'