到目前为止,我习惯在目录中的pyenv
用户名下安装 python 版本。我使用 Debian 包将项目目录与使用.我用来在项目目录中存储每个项目的自定义 python 环境。pydev
/home/pydev
direnv
pyenv
pip-tools
编辑 - 此链接给出了隔离开发环境的基本原理
https://pwal.ch/posts/2019-11-10-sane-python-environment-2020-part-1-isolation/
编辑 - 上面链接的作者在这里开发了他自己的独立 python 环境工具(我不想为每个项目安装一个 python 版本,所以我使用 Pyenv 和 pip-tools 将 python 版本与 env 库链接):
https://github.com/pwalch/lonesnake
我正在编写用于开发、潜在专利披露的 Python 应用程序,并希望能够在 Linux Debian 服务器上投入生产。文件/srv
系统层次结构标准 (FHS) 指定/opt
.
https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/Linux-Filesystem-Hierarchy.html#opt
/opt/pythonapp01/code0000
/srv/pythonapp01/eod-data
我现在正在开发的应用程序使用 csv 格式的日终数据,该数据在开发中不会更新,但会在生产中每晚更新。 python 代码会将 csv 转换为其他 csv 格式以作为文件存储,并将这些修改后的 csv 文件转换为文件格式以提供 Highcharts stockcharts。
我的问题是如何在Linux文件系统层次结构下组织目录?如何存储用于开发的文件、支持可能的专利披露以及将生成的 Python 应用程序在 Linux Debian 服务器上投入生产?开发和文档文件应该位于用户文件夹中吗? eod 数据应该进入/srv/pythonapp01
并且代码应该进入吗/opt/pythonapp01/code0000
?安装的环境pyenv
也应该pip-tools
进入/opt
生产环境下的应用程序目录吗?我读过,应用程序应该避免在生产中使用系统 python,而且我从未在生产中设置过 python 应用程序,因此这将有助于在开发阶段的早期获得一些指导。
答案1
这是几个问题,我将其抽象为三个:
如何组织 Python 源代码和开发文档?
如何打包 Python 应用并将其部署到 Linux?
我在哪里存储每天生成的数据?
组织开发和文档文件
使用源代码/版本控制系统,可能是现代版本控制工具 git,与 GitLab 或 GitHub 或类似的 git 托管服务一起实现安全、共享的远程存储。
因此,您将拥有一个存储库,一个以您的项目或应用程序命名的特殊目录。
在您的存储库中,文档和源代码的排列将取决于您正在构建的内容。我喜欢将文档.md
或.rst
文件保存在docs
目录中。通常有一个README.md
描述项目/存储库的 。
Kenneth Reitz 创建了一个 Python 模块的示例结构,如下所示: https://github.com/navdeep-G/samplemod。对于初学者来说,它并不是完全最小化的,因此您可以跳过您不理解的部分,但这是一个很好的起点。 https://docs.python-guide.org/writing/struct/描述了结构。
我不能 100% 确定这pyenv
适用于我下面描述的部署方法,因为我使用venv
或 ,virtualenv,
但部署真正需要的只是requirements.txt
列出需要在新的 python 环境中安装的包。您可以通过键入已安装的所有软件包来requirements.txt
在工作环境中创建一段时间。pip freeze
将其重定向到 arequirements.txt
并保存。
如何打包和部署Python应用程序?
对于基于 Linux 和 Unix (Mac) 的系统的“单文件”部署,pex
效果很好并且相当简单。 https://pypi.org/project/pex/。有一个简短、清晰的教程:https://medium.com/ovni/pex-python-executables-c0ea39cee7f1。
pex,
除了您可以从以下位置开始之外,还有很多选择https://packaging.python.org/en/latest/如果你想调查他们。
要明确回答您的问题“pyenv 和 pip-tools 安装环境是否也应该进入生产中 /opt 下的应用程序目录?”,您不需要安装它们,因为 pex 文件是独立的。
我在哪里存储日常数据?
您问“是否应将 eod 数据放入/srv/pythonapp01
并放入代码/opt/pythonapp01/code0000?
”
数据位置看起来不错,但您的应用程序看起来更像/opt/bin/pythonapp01.pex
(或您选择的任何二进制/可执行/打包格式)/opt/bin
(然后您需要添加/opt/bin
到PATH
任何想要运行它的用户)。例如,Mac OS 安装的自制程序包/opt/homebrew/bin.
/usr/local/bin
是另一个流行的安装位置。
您可以使用多种方案来保存日终数据,例如按年份数字 1 到 365,或按日期(具有分层目录)。我将每日温度读数保存在例如中,/mnt/data/2023/02/06/
并每天创建一个新的每日目录,每月创建一个新的每月目录,每年创建一个新的年度目录。
保留备份!
我希望这是有帮助的!