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())