通过符号链接启动 python 脚本



我有一个可执行的python脚本,它存在于"scripts"目录中,并且在根目录中有一个指向该脚本(用于启动文件)的符号链接。像这样:

.
├── scripts
│   ├── const.py
│   ├── fops.py
│   ├── i_build.py
│   └── i_Props.ini
└── build_i -> scripts/i_build.py

我希望能够通过以下方式启动/运行我的脚本:

python build_i

从根目录。i_build.py脚本将尝试打开i_Props.ini并根据其中的内容执行一些魔术。

问题是,当i_build.py脚本通过根目录中的符号链接启动时,i_build.py脚本将在根目录中查找其他文件(而不是存储i_build.py的/scripts目录)。

i_build.py文件的 props 文件位置为:

PROP_FILE = "i_Props.ini"

并尝试打开它,然后失败。出于显而易见的原因,我不想对路径进行硬编码。

在主文件中添加os.getcwd()的快速测试证实了我的怀疑,即它认为 CWD 是根目录,并且检查__file__说它是符号链接("build_i")。

我能做些什么来让 python 使用符号的目的地,例如__file__名称和 CWD?

您可以使用__file__,但您必须采取一些预防措施才能获得真正的路径:

import os
base_dir = os.path.dirname(os.path.realpath(__file__))

然后加载与base_dir相关的其他文件/资源:

some_subdir = 'my_subdir'
some_file = 'my.ini'
ini_path = os.path.join(base_dir, some_subdir, some_file)

只有几种可能性浮现在脑海中:

  1. 在根目录中有一个调用你的python的shell文件按显式路径编写脚本。
  2. 将它所在的目录添加到您的路径中。
  3. 专门将目录添加到 sys.path

能够从符号链接启动 Python 脚本并让脚本使用链接目标路径的最简单方法是:

os.chdir("<path to link destination>")

例如,我喜欢将我的脚本及其相关文件放在/usr/local/lib/myapp 中。

然后为了方便起见,我在/usr/local/bin/中创建了一个指向/usr/local/lib/myapp/myapp.py 的符号链接:

cd /usr/local/bin
ln -s ../lib/myapp/myapp.py myapp

在 myapp.py 我会有这个:

os.chdir("/usr/local/lib/myapp")
# put any import statements for myapp files here

最新更新