Python导入;忽略分支/主干/标记层

2024-10-01 13:43:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我如何按如下方式破解PYTHONPATH。你知道吗

目前我有

trunk/
   subproject1/
      __init__.py
      subsubproject/
          __init__.py
          module1.py
   subproject2/
   subproject3/
branch/ ...
tag/ ...

所以我就设置PYTHONPATH=trunk,然后

import subproject1.subsubproject.module1

按预期工作

然而,这些子项目正在变得难以处理。你知道吗

我想要

trunk/
   subproject1/
      # __init__.py # I imagine these may have to be sacrificed 
      subsubproject/
          trunk/
              module1.py
          branch/ ...
          tag/ ...
   subproject2/
   subproject3/

在某种程度上,我仍然可以使用相同的import语句,即

import subproject1.subsubproject.module1

python更好,但是bash可以接受

我一直在修补__init__.py__all__但都没有用。我会继续努力,但如果有人已经这样做了,我会感谢节省的时间。你知道吗


Tags: pyimportbranchinittag方式module1trunk
2条回答

subsubprojecttrunk__init__.py中添加以下行:

from subproject1.subsubproject.trunk import module1

这样你就可以随心所欲地进口了。你知道吗

下面的代码最终为我工作(通过设置env var,我可以选择加载trunk或特定的tag/branch

import os
from pkgutil import extend_path

_file_path, _file_name = os.path.split(os.path.abspath(__file__))[0]

_svn_ver = os.environ['SVN_VER'] if 'SVN_VER' in os.environ else 'trunk'
if 'SVN_VER%s' % _file_name in os.environ:
     _svn_ver = os.environ['SVN_VER%s' % _file_name]

__path__ = extend_path(__path__, os.path.join(_file_path, _svn_ver))

Python社区什么都想到了,我喜欢这门语言!我暂时不回答这个问题,看看是否有更好的解决办法。你知道吗

编辑

由于某些进口产品仍不起作用,上述内容有一些细微的变化

import os

_file_path, _file_name = os.path.split(os.path.abspath(__file__))

_svn_ver = os.environ['SVN_VER'] if 'SVN_VER' in os.environ else 'trunk'
if 'SVN_VER%s' % _file_name in os.environ:
     _svn_ver = os.environ['SVN_VER%s' % _file_name]

__path__ += [os.path.join(__path__[0], _svn_ver)]
execfile(os.path.join(_file_path, _svn_ver, '__init__.py'))

此代码可以添加到包含branch/tag/trunk的每个目录中,并且这些(branch等)中的__init__.py文件仍将被使用。你知道吗

相关问题 更多 >