python - 如何组织 python 代码以便顺利工作并轻松分发?
问题描述
首先,我必须明确我不是开发人员,也没有运气在信息项目的团队中工作。因此,很难获得良好的编码实践(我尝试从我在网上看到的内容中学习,但它在我的脑海中非常混乱/困惑)。
尽力做到最好,这是我的旧代码结构(稍后我将解释我在使用此代码时遇到的问题):
.
├── .env
├── .git
├── .gitignore
├── README.md
├── config.py
├── data
│ ├── input
│ ├── interim_input
│ └── output
├── requirements.txt
├── tests
│ ├── batch.py
│ ├── data
│ ├── mytest.py
│ └── test_upload_twb.py
├── mypackage
│ ├── __init__.py
│ ├── generate_trad_file_2.py
│ ├── generate_twb_file_4.py
│ ├── parse_twb.py
│ ├── twb_mysql.py
│ ├── upload_trad_file_3.py
│ └── upload_twb_1.py
└── venv
一些精度:
- 所有敏感信息(例如 Mysql 登录/密码)将在 .env 文件和 pyton-dotenv 包的帮助下作为环境变量加载
- config.py 文件让我上传所需的配置(主要来自环境变量)
以下是我目前的问题:
尝试运行我的旧代码时,我注意到在创建虚拟环境(使用 python -m venv venv)后,我无法使用当前的 python 版本 Python 3.8.3(pip install -r requirements.txt)安装依赖项。事实上,python 版本没有在任何地方标明,我想知道你是如何工作的?您是在 Readme.md 中指定 Python 版本还是有其他技巧(我们不能在 venv 中指定 Python 版本)?
让 .env 文件包含敏感信息是否安全(我没有提交它,但我想知道它如何在公司中工作以防止所有访问代码的开发人员查看所有敏感信息
我正在尝试运行我的代码,我将不得不测试不同的功能(因为我必须重新创建数据库等,所以它会中断)。我正在考虑尝试将它们与命令行分开运行,但下次保留这些命令似乎是一个最佳主意。因为我想运行不同的功能(一个由.py,因为它们实现了真正不同的东西但对应于管道中的有序步骤)我正在考虑编写不同的test_file。我能感觉到我再次没有得到正确的方法,所以如果你能建议我......
非常感谢您的好意。
解决方案
问题
管理团队成员之间 Python 项目的 Python 版本和依赖项。
解决方案
考虑将 pipenv 和 dotenv 与设置脚本一起使用。
Pipenv 是 venv 之上的一个抽象,如果您有使用 ruby 或bundle
node 的经验,它更符合您对包管理器的期望。npm
yarn
它做了很多很棒的事情,但主要是它为你创建了一个 Pipfile 和 Pipfile.lock。
点文件
Pipfile 是定义依赖项、包注册表和 Python 版本的地方(替换 requirements.txt)。
Pipfile.lock
Pipfile.lock 用于明确定义 Pipfile 中注明的软件包及其版本和 SHA “锁定”,以防止无意中自动升级软件包或在生产环境中安装恶意软件包。
环境文件
假设您已经在使用 dotenv,请为您的应用创建一个包含所有环境变量的 env.example 文件,并使用不敏感的默认值。在项目的 bin 文件夹中编写一个脚本,命名为setup
新工程师可以运行,只需将 env.example 复制到 .env 以及任何其他细节以自动化项目设置(即:pipenv 安装)
参考
Pipenv:https ://pipenv-fork.readthedocs.io/en/latest/
设置工具: https ://setuptools.readthedocs.io/en/latest/
推荐阅读
- c# - 将一个数字拆分为多个数字
- excel - 在不同的单元格上粘贴不同的值
- security - 在 AppScan 期间,是否可以判断特定 URL 是否已被扫描?
- javascript - 在 Angular 的 ngIf 条件中使用 split 函数
- android - 是否有任何轻量级库可以从 Android 的本地存储中读取 pdf 文件?
- sql - 带有 order by 的 sqlite select 语句
- go - 在 Intellij 中调试 Go 例程
- python - 类自定义 __eq__ 作为哈希的比较
- c - 如何在 C 中处理(设置条件和比较)带符号的浮点数?
- python - 如何返回与特定索引相关的值。如果值来自输入