运行python应用程序时只使用sudo的ImportError?

2024-06-24 13:09:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用sudo命令运行一些python代码,但是每次我这样做时,它都会给我一个导入错误。{cd2>如果终端没有出错。另外,如果我构建了一个包含多个导入的代码,然后不使用sudo命令来运行它,那么它不会给我任何错误,代码也会完美地运行。我已经在sudoers文件夹中添加了默认值env_keep += "PYTHONPATH",所以这不是问题所在。我安装了水蟒3,也许这是有用的信息?在

我在运行GNOME Ubuntu16.04.1 LTS。和内核版本4.4.0-59-generic。在

对不起,我对这个很陌生,但我正在学习。在

我运行which python,然后我运行sudo which python,他们给了我不同的目录。在

sudo which python给了我usr/bin/pythonwhich python给了我home/user/anaconda3/bin/python

我试着运行sudo ./anaconda3/envs/ml/bin/python doc.py,但现在它说找不到文件。在

我用sudo运行它,因为我需要docker的权限才能工作。在

编辑:尝试sudo-E而不是sudo会产生相同的错误。在


Tags: 代码命令env文件夹终端whichbin错误
1条回答
网友
1楼 · 发布于 2024-06-24 13:09:33

问题是sudo在查看可执行文件时,^{没有遵循通常的PATH顺序:它首先搜索系统目录。这是写在man sudo中的:

SECURITY NOTES sudo tries to be safe when executing external commands.

To prevent command spoofing, sudo checks "." and "" (both denoting current directory) last when searching for a command in the user's PATH (if one or both are in the PATH). Note, however, that the actual PATH environment variable is not modified and is passed unchanged to the program that sudo executes.

因此,要解决这个问题,必须确保给sudo的命令与系统可执行文件不匹配,即指定绝对路径:

sudo /home/user/anaconda3/bin/python

应该起作用的一般命令是:

^{pr2}$

这是因为which python是在sudo之前执行的,其输出作为参数传递给sudo。但是sudo默认情况下不执行任何“类似shell”的设置,并且可能会限制环境,因此您可以考虑使用-E或{}标志使sudo不受影响地通过环境并执行正确的shell设置。在

相关问题 更多 >