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

时间:2016-04-24 20:04:31

标签: python python-2.7 import python-import

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

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参数调用解释器

更新

从我迄今为止找到的答案中我得出结论,我有3个选项

  • 编写一个设置以将包包含到我的PYTHONPATH中,以便所有脚本无论它们在何处都可以调用模块

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

  • 做一些sys.path hack

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

1 个答案:

答案 0 :(得分:0)

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