python相对导入的问题

时间:2011-08-24 12:15:20

标签: python package

我在Windows上运行以下项目,具有以下目录结构..

Project\Src\Lib\General\Module_lib.py  
Project\Src\executables\example.py

现在,我想在Module_lib.py中导入example.py ..请帮我解决一下这个问题?

example.py的内容:

from ..lib.general.Module_lib import Module_lib  

输出:

Value Error : Attempted relative import in non-packages

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

Project\Src\Lib\General添加到PYTHON_PATH,以便运行时可以找到它。这是我能想到的唯一真正方便的解决方案。

您可以在此处找到添加python路径的方法: https://stackoverflow.com/questions/6318156

也可以在脚本中执行:

import sys
sys.path.append(os.path.dirname(__file__))

这不会开箱即用,因为dirname调用是您当前的文件。要解决此问题,您可以多次调用它来移动目录。我希望这很清楚。

dir1 = os.path.dirname(__file__)
dir1up = os.path.dirname(dir1)
dir1upup = os.path.dirname(dir1up)

答案 1 :(得分:0)

您需要定义PYTHONPATH环境变量,以便它包含您希望Python查找模块的所有目录。假设您的源树位于C:驱动器的根目录中,您有两个选择:

  1. 将所有叶子目录添加到PYTHONPATH并直接导入模块,例如:

    set PYTHONPATH=C:\Project\Src\Lib\General
    

    在这种情况下,您可以直接导入模块:

    import Module_lib
    
  2. 通过添加名为__init__.py的空文件来创建目录包,以便您可以使用限定名称来导入模块,并将更少的目录添加到PYTHONPATH中。你可以这样做:

    set PYTHONPATH=C:\Project\Src
    

    在这种情况下,您可以使用合适的限定名称导入模块:

    import Lib.General.Module_lib
    

    要实现此目的,您需要将名为__init__.py的空文件添加到C:\ Project \ Src \ Lib和C:\ Project \ Src \ Lib \ General目录。