【发布时间】:2021-07-07 16:59:40
【问题描述】:
我有一个 Python 脚本,它可能最终位于不同服务器上的不同目录中。我的脚本有 sys.path.insert 行,它在其中查找库,并在与脚本相同的目录中查找 config.ini 文件。我希望能够使用完整路径运行脚本。
example.py:
#!/usr/local/bin/python3.6
import sys, getopt, configparser
sys.path.insert(0, '../lib/')
from myFunctions import mySendmail, remoteFileChkSum, sendfile
...
def main():
config = configparser.ConfigParser()
# username and encrupted passwords are in config.ini
# keys for encryption are in .keys
config.read('config.ini')
config.read('.keys')
在某些主机上,该文件位于/export/apps/bin/ 中,而lib 文件夹位于/export/apps/lib 中。在其他主机上,它位于 /export/home/ray/bin 中,lib 文件夹位于 /export/home/ray/lib 中。
什么是最佳实践,以便我可以从任何主机上的任何位置运行脚本?我应该在开头找到脚本的目录/位置并执行os.chdir('<DIR>')吗?
【问题讨论】:
-
获取当前工作目录如下
cwd = os.getcwd()@Ravi -
@Vishnudev 给了我当前的工作目录。但是我需要脚本所在的目录,因为对 lib 和 config 文件的引用是对那个的引用
-
当前最佳做法是让您的模块可安装,并让
pip将其数据文件安装到系统相关位置,该位置可以从包的元数据中检索。对于一个快速而肮脏的解决方案,看起来你可以使用pathlib.Path(__file__).parent() / 'lib' / 'config.ini' -
如果从命令行启动程序并且使用
sys.argv,第一个参数将是程序运行的路径,请参阅this question -
您可以使用
os.dirname(__file__)获取当前正在运行的脚本的目录——这是一种非常常见的方法。