Python 为root用户安装pip库
我有一个systemd服务,它定期读取根文件的第一行,对其进行转换,然后使用png_util:Python 为root用户安装pip库,python,pip,systemd,Python,Pip,Systemd,我有一个systemd服务,它定期读取根文件的第一行,对其进行转换,然后使用png_util: import png_util with open('root-owned-file', 'r') as f: f.read() ...rest of logic... 现在,当systemd守护进程启动时,它无法访问我随pip安装的png_util库(pip install png_util),因为它只为安装用户安装。当我用sudo启动脚本时,也会发生这种情况: ModuleNotFoun
import png_util
with open('root-owned-file', 'r') as f:
f.read()
...rest of logic...
现在,当systemd守护进程启动时,它无法访问我随pip安装的png_util库(pip install png_util),因为它只为安装用户安装。当我用sudo启动脚本时,也会发生这种情况:
ModuleNotFoundError: No module named 'png_util'
如果我读取自己拥有的文件,并以用户身份正常执行脚本,则一切正常
systemd服务:
[Unit]
Description=PNG
[Service]
ExecStart=/tmp/pngreader
[Install]
WantedBy=multi-user.target
诀窍是简单地使用pip安装--user root,然后以某种方式为root用户设置PYTHONPATH吗?我认为您可以通过虚拟环境获得所需的功能 您需要专门为该脚本创建一个虚拟环境。您将在该环境中使用正确的版本安装所需的所有软件包。只要在虚拟环境处于活动状态的情况下运行脚本,一切都将可用。-请参阅 要创建一个虚拟环境,请运行python3-m venv,路径为您要存储它的位置,例如~/.venvs/my_项目/ 要安装软件包,首先必须使其处于活动状态,然后运行pip
source <your_venv_path>/bin/activate
pip install png_util
source/bin/activate
pip安装png_util
到这里,您将准备好虚拟环境并安装软件包。如果在虚拟环境处于活动状态的情况下运行脚本,则包将可用
现在,因为您的脚本是一个守护进程。基本上,虚拟环境在中创建一个Python副本,您只需在脚本中添加使用该Python“副本”的指令。您只需添加#即可/bin/python
作为脚本的第一行
这样,当脚本运行时,它确实会在安装了所有软件包的虚拟环境中运行
PS:通过简单地以sudo的形式运行pip,可能所有东西都可以工作,因为它将在系统范围内安装软件包,使其可供所有用户使用。但是,由于它所带来的安全风险,这种选择是非常不受欢迎的,请参见此
希望这有帮助 我想你可以通过虚拟环境得到你需要的东西 您需要专门为该脚本创建一个虚拟环境。您将在该环境中使用正确的版本安装所需的所有软件包。只要在虚拟环境处于活动状态的情况下运行脚本,一切都将可用。-请参阅 要创建一个虚拟环境,请运行python3-m venv,路径为您要存储它的位置,例如~/.venvs/my_项目/ 要安装软件包,首先必须使其处于活动状态,然后运行pip
source <your_venv_path>/bin/activate
pip install png_util
source/bin/activate
pip安装png_util
到这里,您将准备好虚拟环境并安装软件包。如果在虚拟环境处于活动状态的情况下运行脚本,则包将可用
现在,因为您的脚本是一个守护进程。基本上,虚拟环境在中创建一个Python副本,您只需在脚本中添加使用该Python“副本”的指令。您只需添加#即可/bin/python
作为脚本的第一行
这样,当脚本运行时,它确实会在安装了所有软件包的虚拟环境中运行
PS:通过简单地以sudo的形式运行pip,可能所有东西都可以工作,因为它将在系统范围内安装软件包,使其可供所有用户使用。但是,由于它所带来的安全风险,这种选择是非常不受欢迎的,请参见此
希望这有帮助 为什么不使用virtualenv?您是否尝试过su根目录,然后pip根目录下安装?Root使用的工作区与用户不同。顺便说一句,Virtualenv是更好的选择。我的评论只是基于您询问Root用户的事实。为什么不使用Virtualenv?您是否尝试过su Root,然后在Root下进行pip安装?Root用户使用的工作区与用户不同。顺便说一句,Virtualenv是更好的选择。我的评论是基于您询问Root用户的事实。我不知道虚拟环境,但这确实有效。非常感谢您的详细描述!!很高兴它有用。虚拟环境非常好,最好将其用于所有项目。主要的好处是,您拥有项目所需的所有软件包,只有您需要的软件包和运行该项目的环境中的正确版本。然后,如果一个不同的项目需要不同的版本,没有什么会混淆,因为每个项目都在自己的venv上运行。我肯定会研究这一点,并开始使用它的所有时间。谷歌
pipfreeze>requirements.txt
查看它是如何使用的。我不知道虚拟环境,但这确实有效。非常感谢您的详细描述!!很高兴它有用。虚拟环境非常好,最好将其用于所有项目。主要的好处是,您拥有项目所需的所有软件包,只有您需要的软件包和运行该项目的环境中的正确版本。然后,如果一个不同的项目需要不同的版本,没有什么会混淆,因为每个项目都在自己的venv上运行。我肯定会研究这一点,并开始使用它的所有时间。谷歌pipfreeze>requirements.txt
查看它是如何使用的。