ホームページ  >  記事  >  バックエンド開発  >  Python プロジェクトで構成を読み書きする正しい方法は何ですか?

Python プロジェクトで構成を読み書きする正しい方法は何ですか?

PHPz
PHPz転載
2023-05-09 19:16:061597ブラウズ

Python プロジェクトで構成を読み書きする正しい方法は何ですか?

1. Python ファイルに設定を書き込みます

この方法は非常に簡単ですが、セキュリティ上重大な問題があります。設定はコードに記述されています。誰かがソースコードを github にアップロードすると、データベースの設定が全世界に公開されたことになります。もちろん、この単純な設定は、設定ファイルに機密情報が含まれていない場合にも使用できます。方法。

2. 外部設定ファイルを使用します

設定ファイルとコードを独立させます通常、設定の保存には json、yaml、または ini のファイル形式が使用されます。

環境変数とPythonライブラリを組み合わせて外部ファイルを読み込む まず、開発では通常生成環境に触れることがないため、生成環境の設定ファイルは運用と保守、運用と保守はすべて適用されます。必要な構成を書き込んだ後、それを運用サーバー上の指定された場所に配置すると、コードは指定された場所から構成を読み取ります。

プログラムの統一的なデバッグを容易にするために、システム環境変数 (XXX_CONFIG_PATH) を事前に合意して、構成ファイルの保存パスを指定できます。

例: export XXX_CONFIG_PATH =
/home/test/configs/config.ini
これは、一時的な環境変数を設定するためのものです

linux、ubuntu 環境変数

查看环境变量:
 env
 设置永久环境变量
 1.在/etc/profile 的文件下编辑,所改变的环境变量是面向所有用户的
 export CLASSPATH = /../...该路径为绝对路径
 2.在当前用户目录下./barsh_profile文件中修改 进行修改的话,仅对当前的用户生效
 vim /home/wens/.barshc
 export CLASSPATH = /../...该路径为绝对路径
 最后使用source命令 可以直接使环境变量生效
 source/home/wens/.barshc //直接跟环境变量的文件

windows 環境変数

查看环境变量:
 set
 查看某个环境变量:
 set path
 修改环境变量
 输入 “set 变量名=变量内容”即可。比如将path设置为“d:nmake.exe”,只要输入set path="d:nmake.exe"
 注意:所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。
 永久性修改环境变量的方法有两种:
 一种是直接修改注册表
 另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量(查看详细) 
 设置了环境变量后,需要重启 pycharm 生效

3. システム環境変数を直接使用して構成を読み取ります

#この方法 実際には、構成情報を保存するためにファイルを使用するのではなく、すべての構成情報を環境変数に保存するのが一般的です。運用と保守では、Ansible デプロイメント スクリプトを使用して、環境変数を実行する前に、構成する必要がある情報をインポートします。プログラム。

ファイルストレージを使用しないことにより、パスワードなどの構成情報の保護はある程度強化されますが、特に構成変更が必要な場合には運用保守の負担が増大します。

4. マイクロサービス アーキテクチャ

一部のマイクロサービス アーキテクチャでは、構成センターが特別に開発され、プログラムがオンラインから構成を直接読み取り、構成管理が行われます。開発や運用保守を容易にするためのGUIを開発します。

5. 一般的なプロジェクトで推奨される設定方法

-app
-__init.py
-app.py
-settings
 -__init__.py
 -base.py
 -dev.py
 -prod.py

その中に、開発環境か本番環境を使用するか現在の環境を判断するための判定ロジックを追加してロードします。異なる構成パラメータ。

# settings/__init__.py
 import os
 # os.environ.get() 用于获取系统中的环境变量,因为在生产环境中,一般都会把一些关键性的参数写到系统的环境中。
 # 所以PROFILE的值其实就是我们配置的环境变量的值。如果没有配这个值,默认走dev的配置。
 # PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE", "dev")
 PYTHON_PRO_PROFILE = os.environ.get("PYTHON_PRO_PROFILE")
 print("是开发环境还是生产环境: ", PYTHON_PRO_PROFILE) 
 if PYTHON_PRO_PROFILE == "dev":
 from .dev import *
 elif PYTHON_PRO_PROFILE == "prod":
 from .prod import *
 else:
 raise Exception("Not supported runtime profile {}".format(PYTHON_PRO_PROFILE))

base.py

にはいくつかの一般的な構成が保存され、開発環境 dev.py と運用環境 prod に保存されます。 . base.py の変数を py にインポートします。

# settings/base.py
 import os
 import time
 # os.path.abspath: 获取完整路径(包含文件名)
 current_exec_abspath = os.path.abspath(__file__)
 current_exec_dir_name, _ = os.path.split(current_exec_abspath)
 current_up_dir, _ = os.path.split(current_exec_dir_name)
 current_up2_dir, _ = os.path.split(current_up_dir)
 print('------log dir=------', current_up2_dir)
 # 日志文件路径设置
 log_path = f"{current_up2_dir}/logs"
 if not os.path.exists(log_path):
 os.makedirs(log_path)
 t = time.strftime("%Y_%m_%d")
 log_path_file = f"{log_path}/interface_log_{t}.log"
ここで

dev.py:

# 导入了base下所有参数
 from .base import *
 database = {
 "protocol": "mysql+mysqlconnector",
 "username": "xxxxxx",
 "password": "hash string",
 "port": 3306,
 "database": "repo"
 }
ここで

prod.py:

えー

以上がPython プロジェクトで構成を読み書きする正しい方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。