gue*_*tli 61 python environment-variables virtualenv
我想在系统服务文件中"激活"virtualenv.
我想避免在systemd进程和python解释器之间有一个shell进程.
我目前的解决方案如下:
[Unit]
Description=fooservice
After=syslog.target network.target
[Service]
Type=simple
User=fooservice
WorkingDirectory={{ venv_home }}
ExecStart={{ venv_home }}/fooservice --serve-in-foreground
Restart=on-abort
EnvironmentFile=/etc/sysconfig/fooservice.env
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
/etc/sysconfig/fooservice.env
PATH={{ venv_home }}/bin:/usr/local/bin:/usr/bin:/bin
PYTHONIOENCODING=utf-8
PYTHONPATH={{ venv_home }}/...
VIRTUAL_ENV={{ venv_home }}
Run Code Online (Sandbox Code Playgroud)
但我遇到了麻烦.我得到ImportErrors,因为缺少sys.path中的一些内容.
Nil*_*ner 89
virtualenv"融入了virtualenv中的Python解释器".这意味着你可以启动python
或console_scripts
直接在virtualenv中启动,而不需要先激活virtualenv或PATH
自己管理:
ExecStart={{ venv_home }}/bin/fooservice --serve-in-foreground
Run Code Online (Sandbox Code Playgroud)
要么
ExecStart={{ venv_home }}/bin/python {{ venv_home }}/fooservice.py --serve-in-foreground
Run Code Online (Sandbox Code Playgroud)
并删除该EnvironmentFile
条目.
要验证它确实是正确的,您可以sys.path
通过运行来检查
{{ venv_home }}/bin/python -m site
Run Code Online (Sandbox Code Playgroud)
并将输出与...进行比较
python -m site
Run Code Online (Sandbox Code Playgroud)
例如,就我而言,我只是尝试添加 Flask 所需的环境变量
[Service]
Environment="PATH=/xx/yy/zz/venv/bin"
Environment="FLASK_ENV=development"
Environment="APP_SETTINGS=config.DevelopmentConfig"
Run Code Online (Sandbox Code Playgroud)
我使用的是 virtualenv,所以/xx/yy/zz/venv/bin
是 virtualenv 文件夹的路径。
虽然库的路径确实包含在virtualenv的python解释器中,但是我对使用安装在virtualenv中的二进制文件的python工具遇到了问题。例如,我的Apache Airflow服务无法正常工作,因为它找不到gunicorn
二进制文件。要解决此问题,这是我的ExecStart
指令,其中包含Environment
指令(仅为服务设置环境变量)。
ExecStart={{ virtualenv }}/bin/python {{ virtualenv }}/bin/airflow webserver
Environment="PATH={{ virtualenv }}/bin:{{ ansible_env.PATH }}"
Run Code Online (Sandbox Code Playgroud)
ExecStart
显式使用virtualenv的python解释器。我还添加了一个PATH
变量,该变量在system之前添加了virtualenv的二进制文件夹PATH
。这样,我就获得了所需的python库和二进制文件。
请注意,我正在使用ansible来构建此服务,因此请使用jinja2的花括号。
归档时间: |
|
查看次数: |
35762 次 |
最近记录: |