目前我有一个“main”文件夹,我写的所有模块最终都会出现,但我通常将我正在处理的模块放在'dev'文件夹中,这样我就不会混淆其他文件夹没有准备好的东西。
结构看起来像这样
MyProg |-run.py |-\lib | |-someLibrary.py | ... | |-\main | |-readyScripts.py | ... | |-\dev |-inProgress.py
Run.py将从主文件夹导入脚本。
主文件夹中的脚本使用相对导入从lib文件夹导入someLibrary,它工作正常。
然而,当我仍然在dev文件夹中编写我的程序并直接从那里运行它(即:python inProgress.py)时,它不起作用,说我“尝试在非包中进行相对导入”< / p>
在开发dev中的脚本时,有没有办法从lib文件夹导入模块?
编辑:这是我在inProgress.py中的import语句:
from .lib import someLibrary
理想情况下,我希望保持这种方式,以便当我将其移动到主文件夹时,我不需要对import语句执行任何操作。
答案 0 :(得分:2)
如果您将PYTHONPATH设置为MyProg,您可以在每个文件夹中创建一个空的__init__.py
文件,以便python将它们识别为模块:
MyProg
|-run.py
|-__init__.py
|-\lib
| |-someLibrary.py
| |-__init__.py
| ...
|
|-\main
| |-readyScripts.py
| |-__init__.py
| ...
|
|-\dev
| |-inProgress.py
| |-__init__.py
因此,在inProgress.py文件中,您可以使用:
import lib.someLibrary
在run.py中你可以这样做:
import main.readyScripts
import dev.inProgress
答案 1 :(得分:1)
一种选择是使用他们的路径导入:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
答案 2 :(得分:0)
将PYTHONPATH
设置为一级,然后使用包语法运行它?