从另一个目录导入python文件

import python files from another dierctory

我尝试了太多的解决方案,但都没能成功。

这是目录结构。

1
2
3
4
5
6
7
8
9
|project
|------->folder1
|-------------->file1.py   #file1.py contains class File1
|-------------->file2.py   #file2.py contains class File2
|------->folder2
|-------------->another_file1.py   #another_file1.py contains class SomeClass1
|-------------->another_file2.py   #another_file2.py contains class SomeClass2
|------->Runner
|-------------->logic.py

我需要创建logic.py中所有类的实例我在所有文件夹中创建了__init__.py,在主项目中创建了一个。

_初始文件夹1

1
2
from . import file1
from . import file2

_初始文件夹2

1
2
from . import another_file1
from . import another_file2

_初始项目

1
2
from . import folder1
from . import folder2

我不能从Runner进口任何东西。我有以下错误。

No module named file1.

No module named file2.

SystemError: Parent module '' not loaded, cannot perform relative import

不过,我可以通过这种调整来工作。

1
2
import sys
sys.path.append('../')

在我在Runner目录中的文件中。但我不想在我的每个文件中都这样做。

P.S.使用python 3.5


任何遇到同样问题的人都可以这样做。

1)创建新项目,例如:流式应用程序。

1
2
3
4
5
6
7
8
9
|root --StreamingApplication
|-------> utils
|-------------->helper.py
|-------------->storage_handler.py
|------->config
|-------------->config.py
|-------------->hook.py
|------->app
|-------------->application.py

因此,如果要将文件夹标记为python包,还可以创建__init__.py文件。

PYTHONPATH系统变量添加项目根路径。

~/.bashrc或/etc/剖面中

1
export PYTHONPATH=/path/to/StreamingApplication

source ~/.bashrcsource /etc/profile的源文件

那么在江户记1〔5〕中,你可以这样做。

1
2
3
4
5
6
7
from utils.helper import write_file #write_file is function.
from utils.storage_handler import StorageHandler # StorageHandler is class
import config as conf

class App:
    def __init__(self):
        self.executors = conf.executors  # access  executors variable from config

准备就绪。