使用相对路径导入模块

时间:2019-07-22 16:59:54

标签: python-3.x

首先让我说我知道这个问题已经讨论过了,但是我找不到与我的情况类似的解决方案。

我的目录结构如下:

  • 项目/
    • 工具
      • my_tool
        • tool_name.py
    • 测试
      • lib
        • constants.py
        • my_test.py
        • 常见/
          • check_lib.py

我需要使用相对路径将constants.py,check_lib.py和tool_name.py导入my_test.py。即使我的几个模块位于项目中不同目录的不同深度中,也有办法做到这一点吗?我正在尝试直接在代码中使用“ from module.path import module”类型的导入来执行此操作。任何帮助将不胜感激!

MY解决方案如下:

tool_name.py

  

print(“导入的tool_name.py”)

constants.py

  

打印(“ constants.py已导入”)

check_lib.py

  

print(“已导入的check_lib.py”)

my_test.py

  

导入常量
  导入common.check_lib

     

导入系统
  导入操作系统
  sys.path.append(os.path.abspath('test_project / tools / my_tool'))

     

导入工具名称

输出:

  

constants.py已导入
  check_lib.py已导入
  tool_name.py已导入
  my_test.py正在运行

2 个答案:

答案 0 :(得分:0)

使用PYTHONPATH=.,转到“项目”上一级的目录。

使用稍长的名称调用您的代码,例如$ python -m project.tools.my_tool.tool_name。 这样,由于“工具”代码仍在“项目”中,因此将被允许访问“测试”。

答案 1 :(得分:0)

tool_name.py

print("tool_name.py imported")

constants.py

print("constants.py imported")

check_lib.py

print("check_lib.py imported")

my_test.py

import constants
import common.check_lib

from sys import path as external_import

external_import.append("../../tools/my_tool/")
import tool_name

print("my_test.py is running")

输出:

constants.py imported
check_lib.py imported
tool_name.py imported
my_test.py is running