首页 > 解决方案 > Nginx/Gunicorn/python/matlab 运行时,Worker 无法启动

问题描述

首先,我是初学者,请多多包涵。

我正在尝试使用 Nginx/Gunicorn/Python/Matlab 部署一个 Python Web 应用程序,我正在使用一些打包的 Matlab 库(通过 LibraryCompiler)从import Matlab packagePython 脚本中调用。

要导入 Matlab 打包库,我需要安装 Matlab 运行时。安装 Matlab 运行时后,它建议我将 Matlab 运行时路径设置为 LD_LIBRARY_PATH。

我使用添加了以下行nano ~/.bashrc

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/MATLAB/MATLAB_Runtime/v99/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/extern/bin/glnxa64

bash中不设置LD_LIBRARY_PATH,尝试导入打包好的matlab库,会报错RuntimeError: On Linux, you must set the environment variable "LD_LIBRARY_PATH" to a non-empty string. For more details, see the package documentation.

设置 LD_LIBRARY_PATH 后,它在本地运行完美,但是当我使用sudo gunicorn3 app:server它时无法加载我的 python 脚本,它显示的消息与我没有设置 LD_LIBRARY_PATH 一样

这就是我尝试运行我的网络应用程序时出现的情况。

    [2020-12-17 20:48:12 +0000] [29324] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/lib/python3/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python3/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/lib/python3/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/lib/python3/dist-packages/gunicorn/util.py", line 377, in import_app
    __import__(module)
  File "/home/hossamedwee/flaskapplication/app.py", line 30, in <module>
    import cyclo
  File "/usr/local/lib/python3.6/dist-packages/cyclo/__init__.py", line 283, in <module>
    _pir.get_paths_from_os()
  File "/usr/local/lib/python3.6/dist-packages/cyclo/__init__.py", line 175, in get_paths_from_os
    'For more details, see the package documentation.'))
RuntimeError: On Linux, you must set the environment variable "LD_LIBRARY_PATH" to a non-empty string. For more details, see the package documentation.

请问有什么建议吗?

标签: pythonmatlabnginxgunicorn

解决方案


我能够通过在我的 python 脚本中添加这一行来解决这样的问题。

os.environ['LD_LIBRARY_PATH'] = '/usr/local/MATLAB/MATLAB_Runtime/v99/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v99/extern/bin/glnxa64'

推荐阅读