正如标题所问,根据Linux FHS,在Linux操作系统上存储Python虚拟环境的技术正确位置是什么?
换句话说,允许明确回答的方式是:将Python虚拟环境的位置与您正在提供的数据文件分开是否“技术上正确”?
注意:这个问题不同于我能找到的最接近的已经问过的问题,因为虚拟环境包含库、二进制文件、头文件和脚本。
作为一种额外的复杂情况,我倾向于编写支持互联网可访问服务的代码。然而,我认为这并没有从根本上区别我的需求和消费者在同一服务器上的其他进程的情况。我提到这个细节是为了防止我的评论回应包含“Web开发”式的内容。
供参考,我使用以下文档作为我对Linux FHS的定义:http://www.pathname.com/fhs/pub/fhs-2.3.html 我认为流行的virtualenv-wrapper脚本提供的默认操作不正确,因为它将虚拟环境存储在用户的主目录中。这违反了该目录是用于特定用户文件的隐含概念,以及“没有程序应该依赖此位置”的说法。
从文件系统的根级别来看,我倾向于
如果我要跟随我的反向代理的决定,那意味着
考虑到我的假设和想法,以Nginx作为Python应用程序的反向代理的常见场景为例。在使用/srv存储更改较频繁的文件(例如“静态”资源,图像,CSS)的同时,在/usr/local/service_name/下放置虚拟环境和源代码(例如application.py)是否正确?编辑:明确一点:我知道如何使用virtualenvs。我绝不会对项目布局或在开发环境中工作感到困惑。
换句话说,允许明确回答的方式是:将Python虚拟环境的位置与您正在提供的数据文件分开是否“技术上正确”?
注意:这个问题不同于我能找到的最接近的已经问过的问题,因为虚拟环境包含库、二进制文件、头文件和脚本。
作为一种额外的复杂情况,我倾向于编写支持互联网可访问服务的代码。然而,我认为这并没有从根本上区别我的需求和消费者在同一服务器上的其他进程的情况。我提到这个细节是为了防止我的评论回应包含“Web开发”式的内容。
供参考,我使用以下文档作为我对Linux FHS的定义:http://www.pathname.com/fhs/pub/fhs-2.3.html 我认为流行的virtualenv-wrapper脚本提供的默认操作不正确,因为它将虚拟环境存储在用户的主目录中。这违反了该目录是用于特定用户文件的隐含概念,以及“没有程序应该依赖此位置”的说法。
从文件系统的根级别来看,我倾向于
/usr
(可共享,只读数据)或/srv
(此系统提供的服务数据),但这就是我很难进一步决定的地方。如果我要跟随我的反向代理的决定,那意味着
/usr
。Nginx通常被打包进入/usr/share/nginx或/usr/local/nginx,但是,/usr/应该根据FHS以只读方式挂载。我觉得这很奇怪,因为我从来没有参与过开发速度如此缓慢,以至于“卸载为只读/重新挂载为可写,卸载/重新挂载为只读”被认为值得努力的项目。
/srv
是另一个可能的位置,但被称为“特定服务的数据文件位置”,而 Python 虚拟环境更专注于提供服务所需的库和二进制文件(如果没有这种区分,.so
文件也将在 srv 中)。此外,具有相同要求的多个服务可以共享虚拟环境,这违反了描述中的“特定”细节。
我认为选择正确位置的难度部分原因是虚拟环境是一个“环境”,其中包含二进制文件和库(几乎像自己的小层次结构),这推动了我对在 /usr
下某个位置更加常规的印象:
virtual-env/
├── bin ~= /usr/local : "for use by the system administrator when installing software locally"
├── include ~= /usr/include : "Header files included by C programs"
├── lib ~= /usr/lib : "Libraries for programming and packages"
└── share ~= /usr/local
考虑到我的假设和想法,以Nginx作为Python应用程序的反向代理的常见场景为例。在使用/srv存储更改较频繁的文件(例如“静态”资源,图像,CSS)的同时,在/usr/local/service_name/下放置虚拟环境和源代码(例如application.py)是否正确?编辑:明确一点:我知道如何使用virtualenvs。我绝不会对项目布局或在开发环境中工作感到困惑。