【问题标题】:Import module using relative paths使用相对路径导入模块
【发布时间】:2019-07-22 16:59:54
【问题描述】:

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

我的目录结构如下:

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

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

我的解决方案如下:

工具名称.py

print("tool_name.py 导入")

常量.py

print("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 正在运行

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

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

    用有点长的名字调用你的代码,例如$ python -m project.tools.my_tool.tool_name。 这样,“工具”代码将被允许访问“测试”,因为它仍在“项目”中。

    【讨论】:

    • 感谢您的回复,我应该提到我正在尝试使用“from module.path import module”类型的导入直接在代码中执行此操作。
    【解决方案2】:

    工具名称.py

    print("tool_name.py imported")
    

    常量.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
    

    【讨论】:

    • 感谢您的回复,我明天会试一试,如果这种方法适用于我的场景,我会向您报告,否则会更好地澄清我的问题。但这似乎是我想要的!
    • 好的。确保将所有文件放入正确的目录中。
    • 我无法让它按照您设置的确切方式附加路径,但是,这让我非常接近我正在寻找的正确答案,所以我给了你一个赞成票。感谢您的帮助!
    • ../ 用于从当前文件夹跳出。 lib 第一名 tests 第二名。现在我们在 project 文件夹中。现在我们可以选择我们想要深入的子目录。
    猜你喜欢
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多