如何在Python脚本中修改系统路径变量?

22 投票
3 回答
63394 浏览
提问于 2025-04-16 06:27

我想通过定时任务(cron)来运行一个Python脚本,但它没有正常运行,所以我猜可能是因为环境变量的路径不同。有没有办法在Python脚本里修改这个变量呢?

3 个回答

18

@unutbu 的方法是对的,不过@Joe Schmoe,如果你需要这些信息的话:

import sys
print sys.path
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages',...]
sys.path.append('/home/JoeBlow/python_scripts')
print sys.path
['.', '/usr/local/bin', '/usr/local/lib/python2.6/dist-packages', '/home/JoeBlow/python_scripts',...]
   

sys.path 是一个数组,里面包含了你启动脚本时的 PYTHONPATH 变量中的所有内容(或者说你终端默认的 PYTHONPATH 是什么)。

55

虽然被接受的答案对提问者的需求有效,而且第二个答案在更新python的sys.path变量方面也是正确的,但我觉得如果提问者不能使用被接受的答案(比如说,可能有规定不允许在构建/测试机器上修改操作系统的PATH变量),那么类似于这个SO答案的内容可能就是他们想要的。简单总结一下,想要更改操作系统的PATH环境变量,可以这样做:

app_path = os.path.join(root_path, 'other', 'dir', 'to', 'app')
os.environ["PATH"] += os.pathsep + app_path

至少,这就是我在阅读问题时希望找到的内容。

5

你不需要在 Python 脚本里设置 PATH。相反,你可以在你的 crontab 文件的顶部放一些类似下面的内容:

USER=joe
HOME=/home/joe
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/some/other/path
PYTHONPATH=/home/joe/pybin
MAILTO=joe
LANG=en_US.UTF-8

#min hr    day   mon dow
*/5  12    *     *   *     reminder.py 'Eat lunch'

这样,这些环境变量就会对通过你的 crontab 运行的所有定时任务可用。

撰写回答