正如标题所要求的那样,根据Linux FHS,在Linux操作系统上存储Python虚拟环境的技术适当位置是什么?
另外提供了一个明确的答案:从服务的数据文件中分离Python虚拟环境的位置是否“技术上正确”?
注意: 这个问题不同于我能find的最接近的已经问过的问题 ,因为虚拟环境包含库,二进制文件,头文件和脚本。
作为一个附加的复杂性,我倾向于编写支持互联网访问服务的代码。 但是,我并不认为这是将我的需求与服务的消费者在同一台服务器上的其他进程的场景区分开来。 我提到这个细节,以防我对评论的回应包括“网页开发”内容。
在哪里放置Unix域(AF_UNIX)套接字的端点(文件)?
作为参考,我使用以下文档作为我的Linux FHS的定义: http : //www.pathname.com/fhs/pub/fhs-2.3.html
我不相信stream行的virtualenv-wrapper脚本会build议正确的操作,因为它默认将虚拟环境存储在用户的主目录中。 这违反了目录是针对用户特定文件的隐含概念,以及“没有程序应该依赖这个位置”的说法。
从文件系统的根目录开始,我倾向于/usr (可共享,只读数据)或/srv (这个系统提供的服务的数据),但这是我很难做出决定的地方。
如果我同意我的反向代理的决定,那就意味着/usr 。 Nginx通常打包进入/ usr / share / Nginx或/ usr / local / Nginx,但是, 根据FHS ,/ usr /应该是只读的 。 我觉得这很奇怪,因为我从来没有开发过一个项目,在这个项目中,开发速度如此之慢,以“只读/卸载,卸载/重新装载为只读”的方式被认为是值得的。
/srv是另一个可能的位置,但被称为“特定服务的数据文件的位置”,而Python虚拟环境则更侧重于提供服务的库和二进制文件(没有这个区别, .so文件也会在srv)。 另外,具有相同要求的多个服务可以共享虚拟环境,这违反了描述的“特定”细节。
我认为,select正确位置的困难之一在于,虚拟环境是一个由二进制文件和库(几乎就像它自己的小层次结构)组成的“环境”,这给我的印象是/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应用程序的反向代理的常见场景。 在/usr/local/service_name/下放置一个虚拟环境和源代码(例如application.py),而在更新频率更高的文件(例如'静态'资产,图像,css)中使用/srv是否正确?
编辑:要清楚:我知道为什么和如何使用virtualenvs。 我绝不会混淆项目布局或在开发环境中工作。
正如标题所要求的那样,根据Linux FHS,在Linux操作系统上存储Python虚拟环境的技术适当位置是什么?
请记住, Linux FHS并不是一个真正的标准 ,它是一套指导方针。 它只被LSB称为一个标准 – 这只是一大堆支持Linux的规则。
/run , /sys , /proc和/usr/local都不是LFS的一部分,但你可以在大多数Linux发行版中看到它们。
对于我来说,放置虚拟环境的明确选择是/opt ,因为这个位置是为安装附加软件包而保留的 。
但是,在大多数Linux发行版中,只有root可以写入/opt ,这使得这是一个糟糕的选择,因为虚拟环境的一个主要目标是避免成为root。
所以,我会推荐/usr/local (如果你的普通用户帐户是可写的),但是将它安装到你的主目录是没有问题的。
另外提供了一个明确的答案:从服务的数据文件中分离Python虚拟环境的位置是否“技术上正确”?
我不确定你所提供的数据文件是什么意思,但是这是虚拟环境的规则:
不要把它们放在源代码管理中。
维护已安装软件包的列表,并将其放入版本控制中。 请记住,虚拟环境不是完全可移植的。
保持您的虚拟环境与源代码分开。
鉴于上述情况,您应该保持您的虚拟环境与源代码分离。
考虑Nginx作为Python应用程序的反向代理的常见场景。 将/ usr / local / service_name /下的虚拟环境和源代码(比如application.py)放在/ srv文件中(例如“静态”资源,图片)是正确的吗?
静态资产不是动态文件,我认为你是混淆的术语。
无论哪种方式,你应该做以下几点:
将应用程序文件放在由该用户和该用户单独控制的目录下。 通常这是/home/username目录,但是你可以创建这个/services/servicename 。 将虚拟环境作为该目录的一个子集,以标准的命名格式。 例如,我使用env 。
将静态资产 (如所有媒体文件,css文件等)置于前端服务器可读的目录中。 所以,通常你会做一个www目录或一个public_html目录。
确保为此应用程序创建的用户帐户具有对此资产目录的写入权限,以便能够更新文件。 代理服务器不应具有此目录的执行权限。 您可以通过将目录组更改为与代理服务器用户相同来完成此操作。 鉴于此,我会把这个目录放在/home/username/或/services/servicename 。
使用进程管理器启动应用程序,并确保您的进程管理器在运行应用程序代码时将用户切换到步骤1中创建的用户。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。