以git安全方式从子目录导入python

时间:2012-08-03 23:25:04

标签: python git pythonpath

这是我目前的目录结构:

proj/
proj/__init__.py
proj/submodFolder/
proj/submodFolder/submod/
proj/submodFolder/submod/__init__.py

我正在编写一个项目,我希望在import submod中有import submodFolder.submod甚至proj/__init__.py。但是,如果在submodFolder中没有__init__.py,则无效。

假设submodFolder是我已经分回购的git存储库(如果你愿意,可以使用第三方库);添加必需的__init__.py将打破git subrepo并使更新库与其主存储库复杂化。

假设submodFolder是一个不可变的git子仓库,那么将python从mudree推送到模块的最佳方法是什么?修改python路径似乎是我最接近的解决方案 - 但是已经提出的问题都没有假定为不可变的submodFolder。

示例欢迎,请注意相对路径。

1 个答案:

答案 0 :(得分:2)

如果您不想修改PYTHONPATH环境变量,可以修改proj / __ init__.py中的sys.path,以下内容应该有效:

import sys
import os
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'submodFolder'))

import submod

带有注释的分步代码,因此更有意义:

# get absolute path to proj/__init__.py
script_path = os.path.realpath(__file__)

# strip off the file name to get the absolute path to proj
proj_path = os.path.dirname(script_path)

# join on os.sep to get absolute path to proj/submodFolder
submod_path = os.path.join(proj_path, 'submodFolder')

# add the complete path to proj/submodFolder to sys.path
sys.path.append(submod_path)