从当前文件相对导入

时间:2011-07-13 17:40:16

标签: python import

目前我有一个“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语句执行任何操作。

3 个答案:

答案 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设置为一级,然后使用包语法运行它?