从另一个dierctory导入python文件

时间:2017-04-17 10:51:41

标签: python python-3.x python-module

我已经尝试了太多解决方案,这些解决方案在这里提供,但无法使其发挥作用。

这是目录结构。

|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,在主项目中创建了一个。

__ init __。py #folder1

from . import file1
from . import file2

__ init __。py #folder2

from . import another_file1
from . import another_file2

__ init __。py #project

from . import folder1
from . import folder2

我无法导入Runner内的任何内容。 我得到以下错误。

  

没有名为file1的模块。

     

没有名为file2的模块。

     

SystemError:未加载父模块,无法执行相对导入

但是我可以通过这个调整来实现它。

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

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

P.S。使用 Python 3.5

1 个答案:

答案 0 :(得分:0)

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

1)创建新项目,例如:StreamingApplication。

|root --StreamingApplication
|-------> utils
|-------------->helper.py
|-------------->storage_handler.py
|------->config
|-------------->config.py
|-------------->hook.py
|------->app
|-------------->application.py

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

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

~/.bashrc或/ etc / profile

export PYTHONPATH=/path/to/StreamingApplication

包含source ~/.bashrcsource /etc/profile

的源文件

然后在application.py你可以做这样的事情。

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

全部设定。