从Python中的其他目录导入文件

时间:2015-06-04 05:08:44

标签: python unit-testing path

以下是我的两个文件夹结构:

A/B/C/D/E/F.py

A/B/C/G/H/I/test.py

我的test.py想要导入F.py的课程。我已将根目录设置为C。我试过了:

from C.D.F import FClassname

这不起作用。消息是

ImportError: No module named C.D.F

我确保所有目录都有__init__.py个文件。我不想向test.py添加任何代码。我想在__init__.py中添加代码,以便它适用于我将要编写的所有未来测试文件 在目录H的__init__.py中,我编写了以下代码:

import os
import sys
root = os.path.realpath(os.path.join(os.path.dirname(__file__), '../../'))
sys.path.append(root)

我哪里错了?

2 个答案:

答案 0 :(得分:1)

C内使用此文件结构。

.
|-- D
|   |-- E
|   |   |-- F.py
|   |   |-- __init__.py
|   |   `-- __pycache__
|   |       |-- F.cpython-34.pyc
|   |       `-- __init__.cpython-34.pyc
|   |-- __init__.py
|   `-- __pycache__
|       `-- __init__.cpython-34.pyc
`-- G
    |-- H
    |   |-- I
    |   |   `-- foo.py
    |   `-- __init__.py
    `-- __init__.py
然后

foo.py

from D.E import F

F.foo()

使用PYTHONPATH运行它,包括当前目录(.C

$ PYTHONPATH=. python3.4 G/H/I/foo.py

输出:

foo

答案 1 :(得分:0)

你可以试试这个。

  • 在文件夹__init__.py
  • 中创建C, D, E

然后在test.py

import sys
sys.path.insert(0, '/path/to/C')

from C.D.E.F import FClassname