Python:相对于当前正在运行的脚本添加到sys.path的最佳方法
我有一个充满脚本的目录(比如说project/bin
)。 我也有一个库位于project/lib
并希望脚本自动加载它。 这是我通常在每个脚本的顶部使用的:
#!/usr/bin/python from os.path import dirname, realpath, sep, pardir import sys sys.path.append(dirname(realpath(__file__)) + sep + pardir + sep + "lib") # ... now the real code import mylib
这是一种麻烦,丑陋,必须粘贴在每个文件的开始。 有一个更好的方法吗?
真的,我所希望的是这样的顺利:
#!/usr/bin/python import sys.path from os.path import pardir, sep sys.path.append_relative(pardir + sep + "lib") import mylib
或者甚至更好的是,当我的编辑(或其他提供访问权限的人)决定重新排列input作为其清理过程的一部分时,
#!/usr/bin/python --relpath_append ../lib import mylib
这不会直接移植到非POSIX平台,但它会保持干净。
如果你不想编辑每个文件
- 像普通的python libray一样安装你的库
要么 - 设置
PYTHONPATH
到你的lib
或者如果您愿意为每个文件添加一行,请在顶部添加一个导入语句,例如
import import_my_lib
保持import_my_lib.py
bin和import_my_lib
可以正确地设置pythonpath为任何你想要的库
这是我使用的:
import os, sys sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
创build一个包装模块project/bin/lib
,其中包含:
import sys, os sys.path.insert(0, os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')) import mylib del sys.path[0], sys, os
然后你可以用脚本replace脚本顶部的所有文件:
#!/usr/bin/python from lib import mylib
如果您不想以任何方式更改脚本内容,请在当前工作目录前面加上.
到$ PYTHONPATH(见下面的例子)
PYTHONPATH=.:$PYTHONPATH alembic revision --autogenerate -m "First revision"
一天过一天吧!
我在用着:
import sys,os sys.path.append(os.getcwd())