我不确定是否应该使用相对导入还是将父目录添加到sys.path中。

2024-04-26 21:57:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下层次结构的包

my_package/__init__.py
           script_a.py
           scripts_dir/__init__.py
                       script_b.py
           my_package/__init__.py
                      module_a.py
                      module_b.py

模块\u a和模块\u b包含我在脚本\u a和脚本\u b中使用的函数和类定义(它们是独立的脚本,包含一个main)

当我从脚本中的模块\u a.py导入一些东西时,一切都很好。你知道吗

我的问题是

  • 我不知道如何使用相对导入从模块\u a或模块\u b导入到脚本\u b.py
  • 我不确定是否应该使用相对导入,或者是否将我的\u包添加到系统路径然后使用类似 from my_package.module_a import the_funky_func

  • 我想避免用-m参数调用解释器

更新

从目前为止我在中找到的答案来看,我得出结论,我有3个选择

  • 编写一个安装程序,将包包含到我的PYTHONPATH中,以便所有脚本无论在何处都可以调用模块

  • 调用解释器时使用-m参数

  • 做一些系统路径黑客

还有其他我不知道的选择吗?你知道吗


Tags: 模块py路径脚本package参数层次结构init
1条回答
网友
1楼 · 发布于 2024-04-26 21:57:12
myproject/
        | package1
              | \__init__.py
              | script_a.py
              | script_b.py
        | package2
              | module_a.py
              | module_b.py

您可以使用下面两行将myprojectpath追加到sys path。它可以避免相对导入和命令行中的-m

import sys
import sys.path.append("/absolute/path/to/your/myproject")

myproject文件script_a.py中,如果导入module_a.py,则

import sys
import sys.path.append("/absolute/path/to/your/myproject")
import package2.module_a as ma

相关问题 更多 >