不确定我是否应该使用相对导入或将父目录添加到 sys.path
Not sure if I should use relative imports or add parent dir to sys.path
我有一个具有以下层次结构的包
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 中使用的函数和 class 定义(它们是独立的脚本并包含主要)
当我从 module_a.py 导入一些东西时,在我的 script_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
还有其他我不知道的选项吗?
myproject/
|--package1
|--\__init__.py
|--script_a.py
|--script_b.py
|--package2
|--module_a.py
|--module_b.py
您可以使用以下两行将 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
我有一个具有以下层次结构的包
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 中使用的函数和 class 定义(它们是独立的脚本并包含主要)
当我从 module_a.py 导入一些东西时,在我的 script_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
还有其他我不知道的选项吗?
myproject/
|--package1
|--\__init__.py
|--script_a.py
|--script_b.py
|--package2
|--module_a.py
|--module_b.py
您可以使用以下两行将 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