繁体   English   中英

在运行python应用程序时,仅使用sudo的ImportError吗?

[英]ImportError only with sudo when running python app?

我正在尝试使用sudo命令运行一些python代码,但每次执行此操作时,都会出现导入错误。 但是,如果我在终端中运行import numpy ,它不会给我任何错误。 另外,如果我用多个Imports构建代码,然后在不使用sudo命令的情况下运行它,则不会给我任何错误,并且代码可以完美运行。 我已经在sudoers文件夹中添加了Defaults env_keep += "PYTHONPATH" ,所以这不是问题。 我安装了Anaconda3,所以也许有用的信息?

我正在运行GNOME Ubuntu 16.04.1 LTS。 和内核版本4.4.0-59通用。

抱歉,我对此很陌生,但是我正在学习。

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

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

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

我正在使用sudo运行它,因为我需要docker工作的许可。

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

你的问题是, sudo 按照通常的PATH寻找一个可执行文件时的顺序: 首先搜索系统目录。 这是用man sudo编写的:

安全说明sudo在执行外部命令时会尝试确保安全。

为了防止命令欺骗, sudo检查"." 当在用户的PATH搜索命令时 (如果一个或两个都在PATH ), 最后一个和"" (均表示当前目录 )。 但是请注意,实际的PATH环境变量不会被修改,并且会原样传递给sudo执行的程序。

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

sudo /home/user/anaconda3/bin/python

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

sudo "$(which python)"

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM