我如何破解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__
无济于事。我会继续努力,但如果有人已经这样做了,我会很感激节省的时间。
答案 0 :(得分:0)
在__init__.py
的{{1}}的{{1}}中添加以下内容:
trunk
这应该允许您按照自己的意愿导入。
答案 1 :(得分:0)
以下代码最终为我工作(添加了一项功能,我可以通过设置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
的每个目录以及这些__init__.py
内的branch
个文件中。仍将被使用。