2016-08-22 119 views
2

我正在使用python-gnupg在烧瓶应用程序中连接gpg。该模块与我的应用程序的其余部分一起安装在virtualenv中。在运行时我收到一个500内部服务器错误,异常是:烧瓶应用程序找不到gpg

File "./myproject/views/settings.py", line 257, in settings_keys_add 
    gpg = gnupg.GPG() 
File "/home/puse/myproject/myproject/lib/python3.5/site-packages/gnupg.py", line 733, in __init__ 
    p = self._open_subprocess(["--version"]) 
File "/home/puse/myproject/myproject/lib/python3.5/site-packages/gnupg.py", line 786, in _open_subprocess 
    startupinfo=si) 
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__ 
    restore_signals, start_new_session) 
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child 
    raise child_exception_type(errno_num, err_msg) 
FileNotFoundError: [Errno 2] No such file or directory: 'gpg' 

GPG已安装并正常工作:

[email protected] ~/puse> which gpg 
/usr/bin/gpg 
[email protected] ~/puse> gpg --gen-key 
gpg (GnuPG) 1.4.20; Copyright (C) 2015 Free Software Foundation, Inc. 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. 

Please select what kind of key you want: 
    (1) RSA and RSA (default) 
    (2) DSA and Elgamal 
    (3) DSA (sign only) 
    (4) RSA (sign only) 
Your selection? 
gpg: Interrupt caught ... exiting 

我也可以得到它从Python中的virtualenv内工作:

Python 3.5.2 (default, Jul 5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import gnupg 
>>> gpg = gnupg.GPG() 
>>> a = gpg.scan_keys("/opt/keys/2a798434-ebb3-4dc6-9f76-fd46f0cce6fa") 

我怀疑它与运行该应用程序的用户有关系,但该应用程序正在我的用户下运行,但组设置为www-data。我已经通过运行ps证实了这一点。

systemd。该应用程序的服务文件。

[Unit] 
Description=uWSGI instance to serve myproject 
After=network.target 

[Service] 
User=puse 
Group=www-data 
WorkingDirectory=/home/path 
Environment="PATH=/home/path" 
ExecStart=/home/path/uwsgi --ini config.ini 

[Install] 
WantedBy=multi-user.target 

回答

1

你重写(未追加)PATH变量这一行:

Environment="PATH=/home/path" 

改变它

Environment="PATH=/home/path:/usr/bin:/bin" 

能够使用标准的命令。

BTW检查的/ home /路径存在,我想不是,在刚刚成立的话:

Environment="PATH=/usr/bin:/bin"