我已经尝试了太多解决方案,这些解决方案在这里提供,但无法使其发挥作用。
这是目录结构。
|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
答案 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 ~/.bashrc
或source /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
全部设定。