22

编辑:适用于 root,sudo 是问题所在。参见下文。

我有一个包含我自己的库的目录,例如我的 Python 库位于/home/name/lib/py.
通过将以下行添加到以下行,我已将此目录添加到所有用户(包括 root)的Python PATH/etc/bash.bashrc中:

export PYTHONPATH=$PYTHONPATH:/home/name/lib/py

它适用于所有用户(包括 root)。但它不适用于 sudo。有什么方法可以让我使用 sudo/etc/bash.bashrc吗?

编辑:更多信息:

我已经PYTHONPATH像这样添加到 sudoers 文件中Defaults env_keep += "HOME PYTHONPATH":它不起作用。

env | grep PYTHON:
    PYTHONDONTWRITEBYTECODE=1
    PYTHONPATH=/home/name/lib/py

sudo env | grep PYTHON:
    PYTHONDONTWRITEBYTECODE=1

sudo echo $PYTHONPATH:
    /home/name/lib/py
4

6 回答 6

21

我的解决方法是Defaults !env_reset从 sudoers 中删除。

但是,我不得不保留Defaults env_keep += "PYTHONPATH"在 sudoers 中。
我实际上已经添加了Defaults env_reset(它会重置环境变量),但它仍然有效,因为env_keep.

看起来env_keep!env_reset彼此冲突,但这只是一个猜测。


所以,整个过程:

  1. 添加export PYTHONPATH=/your/custom/path~/.bashrc/etc/bash.bashrc
  2. 添加PYTHONPATHDefaults env_keep += "ENV1 ENV2 ..."sudoers 文件中
  3. Defaults !env_reset从 sudoers 文件中删除(如果存在)
于 2011-11-02T01:08:11.870 回答
21

变量也是如此PATH,即使您传递了保留环境标志,它也不会被带到超级用户环境中-E

我现在使用这个 sudo 命令,没有任何其他修改:

sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript

由于这是一种可行的替代方法(对我来说),我想我会在这里分享。

于 2016-01-29T10:26:25.950 回答
2

操纵的替代方案PYTHONPATH

于 2011-11-02T03:28:10.603 回答
2

另一个提示:

sudo echo $PYTHONPATH:
    /home/name/lib/py

它行不通。Shell 会这样解释它:

1) 从环境变量扩展 $PYTHONPATH 例如:/usr/lib/python

2)执行“sudo echo /usr/lib/python”

于 2012-11-22T09:23:14.347 回答
0

这可能应该张贴在其他地方。但是 sudo 默认不会处理环境文件。如果您想调用 -i 标志应该可以帮助您。它将模拟用户初始登录。

您可能也必须尝试放置变量的位置。http://linux.die.net/man/8/sudo

于 2011-11-01T19:58:11.037 回答
0

遵循配置帮助我在一台 Centos 主机上的专用 VENV 中运行多个 python 服务

  1. 将环境变量导出到单独的文件,例如/etc/sysconfig/my-app
  2. 在服务配置中设置EnvironmentFile选项

见下面的代码:

-bash-4.2$ sudo vi /etc/sysconfig/my-app

PATH=/usr/local/my-app/env/bin:$PATH
LD_LIBRARY_PATH=/usr/local/my-app/env/lib:$LD_LIBRARY_PATH



-bash-4.2$ sudo vi /etc/systemd/system/my-app.service

[Unit]
Description=my-app daemon
After=network.target


[Service]
EnvironmentFile=/etc/sysconfig/my_app
User=app_user
Group=app_user
Type=simple
ExecStart=/usr/local/my-app/env/bin/python /usr/local/my-app/main.py
Restart=on-failure
RestartSec=5s
PrivateTmp=true

[Install]
WantedBy=multi-user.target
于 2019-04-17T06:24:45.690 回答