![](/img/trans.png)
[英]ImportError: dlopen when running pyside6 app | Python
[英]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.