您尚未登录。

#1 2020-08-28 12:00:46

luxni
会员
注册时间: 2014-06-08
帖子: 200

关于python脚本需要使用sudo执行的问题?

PS:其实就是python在使用sudo执行时,要导入第三方库的问题。

在python日常使用中,我们总会遇到Python的脚本需要使用sudo来执行。

但是,当我们使用,sudo 执行脚本时,总是会遇到没有找到该模块的问题,如:

$sudo python demo.py
ModuleNotFoundError: No module named 'demo'

其实这个很明显是python没有添加相应的库路径的问题,如:

$ sudo python -c "import pprint, sys; pprint.pprint(sys.path)"
['',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/usr/lib/python3.8/site-packages']
$ python -c "import pprint, sys; pprint.pprint(sys.path)"
['',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/home/luxni/.local/lib/python3.8/site-packages',
'/usr/lib/python3.8/site-packages']

在使用sudo时,python是没有将本地用于的库路径添加到当前使用的环境变量中的。

笨方法是,可以在Python脚本开头添加第三方库的路径,如:

import os,sys
sys.path.append("/home/luxni/.local/lib/python3.8/site-packages")
print(sys.path)

但是如果是库路径在很多地方的话就要一个一个来添加,很麻烦。

不知道大家还有什么好一点的办法来解决这个问题吗?

离线

#2 2020-08-28 12:12:19

Mr.I
路人丙
所在地: Kerbal
注册时间: 2015-08-29
帖子: 216

Re: 关于python脚本需要使用sudo执行的问题?

可以用 PYTHONPATH 环境变量来增加额外的 import 搜寻目录。

就好比用 LD_LIBRARY_PATH 来指定额外的 lib 搜寻目录和用 PATH 来指定可执行文件的搜寻目录一样。

不过,如果你的 python lib 存放的位置非常分散的话,那一个个添加还是无法避免的。

离线

#3 2020-08-28 12:26:21

依云
性别女,请正确称呼
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 5,862
个人网站

Re: 关于python脚本需要使用sudo执行的问题?

自用的库,加到 PYTHONPATH 里传过去就好了。第三方库,打个包装系统里去。

离线

#4 2020-08-28 15:02:13

luxni
会员
注册时间: 2014-06-08
帖子: 200

Re: 关于python脚本需要使用sudo执行的问题?

加到PYTHONPATH也是一个好方法。

我是这样来搞的:

$nvim .zshrc
alias pysudo="sudo PYTHONPATH=/home/luxni/.local/lib/python3.8/site-packages/:$PYTHONPATH "

$pysudo python demo.py

我想看下大家有什么神奇的操作,笑。

离线

页脚