我如何在虚拟环境中将sudo与python一起使用

问题描述 投票:0回答:2

嗨,我正在尝试从虚拟环境内部以sudo格式运行python脚本。

当我激活虚拟环境后,我通常会使用python somescript.py,并且我的脚本会使用正确版本的python和所有内容启动

[当我使用sudo python somescript.py时,我加载了错误的python安装,这不是我所处的环境。

我该如何解决?

python virtualenv sudo virtual-environment
2个回答
1
投票

我认为这是在这里回答:https://askubuntu.com/questions/234758/how-to-use-a-python-virtualenv-with-sudo

问题几乎可以肯定,当您运行sudo时,virtualenv不会携带环境变量,别名,函数等结束。

解决方案是显式运行虚拟环境的带有sudo的Python可执行文件。例如,如果您的virtualenv是./AwesomeProject,那么您可以运行sudo ./AwesomeProject/bin/python将脚本与具有root特权的virtualenv一起使用。


1
投票

activate脚本设置了一些环境变量(定义了一些函数,...),这些变量有助于调用Python(和工具)。实现目标的一种方法(更像是一种变通方法)是在[DIE.Linux]: sudo(8)会话中携带的变量。为此,您需要:

总计:

sudo

输出(适用于简单命令):

sudo -E env PATH=${PATH} python somescript.py

在这种情况下永不失败的一种方法是使用(Python的)可执行文件完整路径。但是由于这只是一个symlink,所以您可能还是想保留环境:

(py_venv_pc064_03.05.02_test0) [cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q061715573]> python3 -c "import sys, os; print(\"EXE: {0:s}\nPATH: {1:s}\n\".format(sys.executable, os.environ[\"PATH\"]))"
EXE: /home/cfati/Work/Dev/VEnvs/py_venv_pc064_03.05.02_test0/bin/python3
PATH: /home/cfati/Work/Dev/VEnvs/py_venv_pc064_03.05.02_test0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

(py_venv_pc064_03.05.02_test0) [cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q061715573]> sudo python3 -c "import sys, os; print(\"EXE: {0:s}\nPATH: {1:s}\n\".format(sys.executable, os.environ[\"PATH\"]))"
EXE: /usr/bin/python3
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

(py_venv_pc064_03.05.02_test0) [cfati@cfati-ubtu16x64-0:~/Work/Dev/StackOverflow/q061715573]> sudo -E env PATH=${PATH} python3 -c "import sys, os; print(\"EXE: {0:s}\nPATH: {1:s}\n\".format(sys.executable, os.environ[\"PATH\"]))"
EXE: /home/cfati/Work/Dev/VEnvs/py_venv_pc064_03.05.02_test0/bin/python3
PATH: /home/cfati/Work/Dev/VEnvs/py_venv_pc064_03.05.02_test0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
© www.soinside.com 2019 - 2024. All rights reserved.