gpt4 book ai didi

python - Virtualenv:如何使自定义 Python 包含由 uWSGI 托管的多组件共享

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:02 25 4
gpt4 key购买 nike

我有一个有点复杂的项目设置,其中包含多个协同工作的组件。每个组件都是一个单独的 Python 项目,作为一个 uWSGI 应用程序托管在 Nginx 代理后面。组件通过代理相互交互以及与外部世界交互。

我注意到自己要将一些代码从一个组件剪切并粘贴到另一个组件,因为它们执行相似的功能,但与不同的服务交互。显然,我想避免这种情况,因此我将提取通用功能并将其放入单独的“库”项目中,以供不同组件引用。

我在虚拟环境中运行这些应用程序(使用 virtualenv),因此理论上应该很容易将库项目简单地放入 .env/includes。

但是,我的设置有点奇怪。首先,我从/var/www 运行项目(即 uWSGI 从这里托管应用程序),但项目实际上存在于另一个源代码控制目录中。由于各种原因,我不想移动它们,所以我在/var/www 中为项目目录创建了符号链接(symbolic link)。这很好用。但是,现在我有一个潜在的问题,即我也想符号链接(symbolic link)的库项目(当前与其他组件位于同一目录中)放在哪里?

我是否将其符号链接(symbolic link)到 .env/includes 中?如果是这样,我应该如何从我的其他组件中引用该库?我是从 sys.path 还是作为兄弟目录引用它?带有 virtualenv 的 Nginx/uWSGI 是否遵循符号链接(symbolic link)并考虑实际目录,还是盲目地假设一切都在/var/www 中?

这两种方法我都没有尝试过,因为问题的范围似乎很大,所以我想先获得一些意见。不用说,我有点困惑。

最佳答案

我通过将感兴趣的包符号链接(symbolic link)到 .env/lib/python2.7/site-packages 中很容易地解决了这个问题。我最初尝试对整个项目文件夹进行符号链接(symbolic link),但没有成功,因为它找不到包。

似乎我的 uWSGI/Nginx 只是遵循 virtualenv 的 pythonpath 版本,所以无论我在那里配置什么都会被使用。

必须记住对每个包进行符号链接(symbolic link)会有点痛苦,但至少我只需为每个包做一次。

我正在使用 PyDev,它掩盖了这个问题,因为我使用的是默认的 Python 解释器,而不是 virtualenv 中的解释器。一旦我改变了它,它就更容易解决了。

关于python - Virtualenv:如何使自定义 Python 包含由 uWSGI 托管的多组件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31754740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com