我已经用gunicorn和nginx在Ubuntu 18.04服务器上部署了Django项目(在Windows中编码)。在/ home / user / blast / bin /中有一个视图在命令行中调用外部软件包可执行文件。包的路径在.profile
中定义 export PATH="$PATH:/home/user/ncbi-blast-2.8.1+/bin"
在我的Django项目virtualenv中,在echo $ PATH中也可以看到包PATH。
/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games:/ snap / bin: /home/ka4an/ncbi-blast-2.8.1+/bin
我能够在main shell和django virtualenv中的some_script.py中运行可执行程序包,如下所示:
subprocess.run("package_executable", shell=True, stdout=log_file, stderr=log_file)
它返回预期的输出。但是,当通过views.py在活动的Django应用中运行它时,它将返回未找到package_executable的信息。我发现在活动的Django应用程序中,我有不同的echo $ PATH输出,而没有到我的包的PATH:
/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin
活动Django应用由同一root用户运行(who
-返回同一用户)。我可以通过提供包可执行文件的完整路径来在活动的Django应用程序中运行我的包,但是我想知道为什么Django无法识别.profile中定义的$ PATH。