不确定我是不是应该使用相对导入或将父目录添加到 sys.path [重复]
Posted
技术标签:
【中文标题】不确定我是不是应该使用相对导入或将父目录添加到 sys.path [重复]【英文标题】:Not sure if I should use relative imports or add parent dir to sys.path [duplicate]不确定我是否应该使用相对导入或将父目录添加到 sys.path [重复] 【发布时间】:2016-08-18 02:52:28 【问题描述】:我有一个具有以下层次结构的包
my_package/__init__.py
script_a.py
scripts_dir/__init__.py
script_b.py
my_package/__init__.py
module_a.py
module_b.py
module_a 和 module_b 包含我在 script_a 和 script_b 中使用的函数和类定义(它们是独立的脚本并包含一个 main)
当我从 script_a.py 中的 module_a.py 导入一些东西时,一切都很好。
我的问题是
我不知道如何使用相对导入将某些内容从 module_a 或 module_b 导入 script_b.py我不确定是否应该使用相对导入,或者将 my_package 添加到 sys.path 然后使用类似的东西是否更有意义
from my_package.module_a import the_funky_func
我想避免使用 -m
参数调用解释器
更新
从到目前为止我在 SO 中找到的答案中,我得出的结论是我有 3 个选项
编写设置以将包包含到我的 PYTHONPATH 中,以便所有脚本(无论它们在哪里)都可以调用模块
调用解释器时使用-m
参数
做一些 sys.path hack
还有其他我不知道的选项吗?
【问题讨论】:
对于最后一部分,您可以查看我的解决方案:how-to-use-relative-import-without-doing-python-m 【参考方案1】:myproject/
|--package1
|--\__init__.py
|--script_a.py
|--script_b.py
|--package2
|--module_a.py
|--module_b.py
您可以使用以下 2 行将 myproject
路径附加到 sys 路径。可以避免相对导入,避免命令行中的-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
【讨论】:
你会建议将包路径添加到 PYTHONPATH 吗? 是的。范围是项目本身,而不是整个系统以上是关于不确定我是不是应该使用相对导入或将父目录添加到 sys.path [重复]的主要内容,如果未能解决你的问题,请参考以下文章