4

这是我当前的目录结构:

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

我正在写一个项目,我想拥有import submod甚至import submodFolder.submodproj/__init__.py. 但是,如果没有__init__.pysubmodFolder,这将不起作用。

假设 submodFolder 是一个 git 存储库,我有 sub-repoed(如果你愿意的话,一个第三方库);添加必需品__init__.py将破坏 git 子存储库并使从其主存储库更新库变得复杂。

假设 submodFolder 是不可变的 git sub-repo 将 python 向下推到模块的最佳方法是什么?修改 python 路径对我来说似乎是最接近的解决方案——但已经提出的问题都没有假设一个不可变的 submodFolder。

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

4

1 回答 1

2

如果您不想修改 PYTHONPATH 环境变量,您可以sys.path在 proj/__init__.py 内部进行修改,以下应该可以工作:

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)
于 2012-08-03T23:44:59.230 回答