Python中如何使用uwsgi启动带配置文件目录的Python项目?

我现在有一个 python 服务
启动命令是:‘python3 main.py -p 8080 -c conf_testenv’
如果换成 uwsgi 启动,那这个’-c conf_testenv’怎么写在 uwsgi 的命令里?
‘/usr/bin/uwsgi --http :8080 --wsgi-file main.py --callable App --master --processes 4 --threads 8’
求解
Python中如何使用uwsgi启动带配置文件目录的Python项目?

8 回复

这取决于
main.py 怎么理解-c 参数


要使用uWSGI启动带配置文件目录的Python项目,关键在于正确设置--pyargv参数来传递配置路径。假设你的项目结构如下:

myproject/
├── config/
│   └── settings.ini
└── app.py

app.py中,你需要通过sys.argv来获取配置路径:

import sys
import configparser

def application(env, start_response):
    # 从uWSGI传递的参数中获取配置路径
    if len(sys.argv) > 1 and sys.argv[1].startswith('--config='):
        config_path = sys.argv[1].split('=', 1)[1]
    else:
        config_path = 'config/settings.ini'  # 默认路径
    
    config = configparser.ConfigParser()
    config.read(config_path)
    
    # 你的应用逻辑
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [b'Hello World']

启动命令:

uwsgi --http :8000 --wsgi-file app.py --pyargv "--config=config/settings.ini"

这样配置路径就会通过sys.argv传递给应用,你可以在代码中解析并使用它。

总结:用--pyargv传参,在代码里解析sys.argv

-c 是通过 argparse 的 add_argument 自动添加的

可以考虑将一部分配置文件写到环境变量里面

那你这种用法不对,你的 main.py 里,包含了“不只是 wsgi app “的 argparse 这部分功能
而 uwsgi 期望你给它的是一个 wsgi app

sudo ln -s /path/to/your/mysite/mysite_uwsgi.ini /etc/uwsgi/vassals/
#把下边这句增加到 /etc/rc.local 即可自动读取配置文件,且开机启动
/usr/local/python3/bin/uwsgi --emperor /etc/uwsgi/vassals

比如你是 flask,自带有添加 run cmd 的管理库。

回到顶部