【发布时间】:2013-03-25 17:54:35
【问题描述】:
sys.path的第一个条目是当前脚本的目录,根据docs。在以下设置中,我想更改此默认设置。想象一下下面的目录结构:
src/
core/
stuff/
tools/
tool1.py
tool2.py
gui/
morestuff/
gui.py
脚本tool*.py 和gui.py 旨在作为脚本运行,如下所示:
python src/core/tools/tool2.py
python src/gui/gui.py
现在所有工具都从src.core.stuff 导入,GUI 需要gui.morestuff。这意味着sys.path[0] 应该指向src/,但它默认指向src/core/tools/ 或src/gui/。
我可以在每个脚本中调整sys.path[0](使用如下结构,例如,在gui.py 的开头):
if __name__ == '__main__':
if sys.path[0]: sys.path[0] = os.path.dirname(os.path.abspath(sys.path[0]))
但是,这有点多余,对于包含数千个脚本的成熟代码库来说,这变得乏味。我也知道-m 开关:
python -m gui.gui
但这要求当前目录为src/。
有没有更好的方法来达到预期的结果,例如通过修改__init__.py 文件?
编辑:这是针对 Python 2.7 的:
~$ python -V
Python 2.7.3
【问题讨论】:
-
对于初学者来说,
python -m core.tools.tool1 -
你用的是哪个python版本?
-
@Kos:感谢您阅读整篇文章。
-
@krlmlr (擦眼镜) :)
-
你可以使用
setup.py来定义entry_points,例如entry_points={'console_scripts': ['my-tool=my.core.tools.tool2:main', 'my-gui=my.gui.gui:main']}(假设顶层包被称为my并且功能在main()函数中)它定义了@987654347 @ 和my-gui脚本。
标签: python module path python-import