页次: 1
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)
但是如果是库路径在很多地方的话就要一个一个来添加,很麻烦。
不知道大家还有什么好一点的办法来解决这个问题吗?
虽然人菜菜的,但也想做个有趣的人。
离线
可以用 PYTHONPATH 环境变量来增加额外的 import 搜寻目录。
就好比用 LD_LIBRARY_PATH 来指定额外的 lib 搜寻目录和用 PATH 来指定可执行文件的搜寻目录一样。
不过,如果你的 python lib 存放的位置非常分散的话,那一个个添加还是无法避免的。
离线
自用的库,加到 PYTHONPATH 里传过去就好了。第三方库,打个包装系统里去。
离线
加到PYTHONPATH也是一个好方法。
我是这样来搞的:
$nvim .zshrc
alias pysudo="sudo PYTHONPATH=/home/luxni/.local/lib/python3.8/site-packages/:$PYTHONPATH "
$pysudo python demo.py
我想看下大家有什么神奇的操作,笑。
虽然人菜菜的,但也想做个有趣的人。
离线
页次: 1