我在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
实现这一目标的最佳方法是什么?
答案 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:驱动器的根目录中,您有两个选择:
将所有叶子目录添加到PYTHONPATH并直接导入模块,例如:
set PYTHONPATH=C:\Project\Src\Lib\General
在这种情况下,您可以直接导入模块:
import Module_lib
通过添加名为__init__.py
的空文件来创建目录包,以便您可以使用限定名称来导入模块,并将更少的目录添加到PYTHONPATH中。你可以这样做:
set PYTHONPATH=C:\Project\Src
在这种情况下,您可以使用合适的限定名称导入模块:
import Lib.General.Module_lib
要实现此目的,您需要将名为__init__.py
的空文件添加到C:\ Project \ Src \ Lib和C:\ Project \ Src \ Lib \ General目录。