python環境配置文本記錄,python讀配置文件配置信息

本文目錄一覽:

如何進行python項目配置管理?這才是你最需要的python技術

每次開始一個新的 Python 項目,我都會為怎麼管理配置文件而頭疼。不過在遷移我的博客時,終於有空花了點時間,把這件事想清楚。

一年多的時間過去了,一切似乎都很順利,連我在知乎所做的新項目也沿用了該方案,於是決定把解決方案記錄下來。

先說說我要解決什麼哪些Python項目的配置管理問題吧:

可以區分各種環境。

在開發、測試和生產等環境,都可能用到不同的配置,所以能區分它們是一個很基本的需求。

可以有通用的配置項。

各種環境的配置中,需要修改的只佔一小部分。因此通用的部分應該不需要重複定義,否則會帶來維護成本。

可以分成多個部分/模塊。

隨着Python項目的配置管理項的增多,找起配置來會花大量時間,所以劃分它們對維護配置很有幫助。

可以直接使用 Python 代碼。

從文本文件中解析出變量值太麻煩,而且不方便生成批量的數據(例如數組),也不好通過函數調用來生成配置值(例如獲取文件路徑)。

可以將公開和私有的配置文件分開管理。

在開源項目中,應只包含公開的配置項,而不包含私有的配置。不過這個需求對私有項目而言,沒什麼意義。

工作中我先後使用了幾種Python項目的配置管理方式,主要使用的就兩種:

為每個環境分別寫一個配置文件,到相應的環境里,將該環境的配置文件軟鏈接到正確的路徑。

如何進行python項目配置管理?使用分布式的配置服務,從遠程獲取配置。

前者用起來其實蠻麻煩的,特別是想在本地跑單元測試時,需要替換成單元測試環境的配置文件。所以我又把環境變量給加了進來,檢測到指定的環境變量,就加載單元測試的配置。而其他幾個需求也能勉強實現,不過並不優雅。

後者不能直接使用 Python 代碼,網絡不好時需要降級成使用本地緩存,獲取配置服務器的地址需要配置,配置服務器自己也需要配置,而且配置服務器還可能掛掉(知乎內網遇到過全部五台配置服務器都掛掉的情況),所以我用得比較少。

其實仔細想想就能發現,「使用 Python 代碼」也就意味着是 Python 源文件,「有通用的配置項」用 Python 實現就是繼承,似乎沒更好的選擇了。

如何進行python項目配置管理?於是定義一個 Config 類,讓其他環境的配置都繼承這個類:

# config/default.pyclass Config(object):

DEBUG_MODE = True

PORT = 12345

COOKIE_SECRET = ‘default’

REDIS_CONFIG = {‘host’: ‘localhost’, ‘port’: 6379, ‘db’: 0} # …

# config/development.pyfrom .default import Configclass DevelopmentConfig(Config):

COOKIE_SECRET = ‘dev’

# config/unit_testing.pyfrom .default import Configclass UnitTestingConfig(Config):

REDIS_CONFIG = {‘host’: ‘localhost’, ‘port’: 6379, ‘db’: 1}

# config/production.pyfrom .default import Configclass ProductionConfig(Config):

COOKIE_SECRET = ‘…’

REDIS_CONFIG = {‘unix_socket_path’: ‘/tmp/redis.sock’}

為了讓每種環境都只有一個配置生效,還需要加一個策略:[page]

# config/__init__.pyimport loggingimport os

env = os.getenv(‘ENV’) # 可以改成其他名字,自己進行設置try: if env == ‘PRODUCTION’: from .production import

ProductionConfig as CONFIG

logging.info(‘Production config loaded.’) elif env == ‘TESTING’: from .testing import TestingConfig as CONFIG

logging.info(‘Testing config loaded.’) elif env == ‘UNIT_TESTING’: from .unit_testing import UnitTestingConfig as

CONFIG

logging.info(‘Unit testing config loaded.’) else: # 默認使用本地開發環境的配置,省去設置環境變量的環節

from .development import DevelopmentConfig as CONFIG

logging.info(‘Development config loaded.’)except ImportError:

logging.warning(‘Loading config for %s environment failed, use default config instead.’, env or ‘unspecified’)

from .default import Config as CONFIG

這樣只需要在跑應用前,設置不同的環境變量即可。如果是用 Supervisor 維護進程的話,加上一行environment = ENV=”PRODUCTION”配置即可。

當然還可以加其他的規則,例如沒環境變量時,再檢查機器名等。

如何進行python項目配置管理?現在前兩個需求都解決了,再來看分模塊的功能。

這個需求正好對應 Python 的 package,於是把每個Python項目的配置管理文件改成一個 package 即可。接着是如何同時滿足第二和第三個需求。

舉例來說,有這樣的配置:

# config/default.pyclass Config(object):

ROOT_PATH = ‘/’

LOGIN_PATH = ROOT_PATH + ‘login’

SCHEME = ‘http’

DOMAIN = ‘localhost’

ROOT_URL = ‘%s://%s%s’ % (SCHEME, DOMAIN, ROOT_PATH)

# config/production.pyfrom .default import Configclass ProductionConfig(Config):

ROOT_PATH = ‘/blog/’

LOGIN_PATH = ROOT_PATH + ‘login’

DOMAIN = ”

ROOT_URL = ‘%s://%s%s’ % (Config.SCHEME, DOMAIN, ROOT_PATH)

其中,LOGIN_PATH 和 LOGIN_URL 的設置邏輯其實是一樣的,但值卻不同,在 ProductionConfig 中重新賦值一次有點不太優雅。

於是把這些設置提取出來,在基本設置初始化以後,再進行設置:

class _AfterMeta(type):

def __init__(cls, name, bases, dct):

super(_AfterMeta, cls).__init__(name, bases, dct)

cls._after()class Config(object):

__metaclass__ = _AfterMeta

ROOT_PATH = ‘/’

SCHEME = ‘http’

DOMAIN = ‘localhost’ @classmethod

def _after(cls):

cls.LOGIN_PATH = cls.ROOT_PATH + ‘login’

cls.ROOT_URL = ‘%s://%s%s’ % (cls.SCHEME, cls.DOMAIN, cls.ROOT_PATH)

# config/production.pyfrom .default import Configclass ProductionConfig(Config):

ROOT_PATH = ‘/blog/’

DOMAIN = ”

如何進行python項目配置管理?所有有依賴的設置項,都在 _after 方法里賦值即可。

不過這樣可能導致靜態檢查和代碼提示出問題,而且使得所有子類都重新定義這些屬性,即便沒有修改父類的屬性,或是覆蓋掉手動設置的值。所以可以再修改一下:[page]

class _AfterMeta(type):

def __init__(cls, name, bases, dct):

super(_AfterMeta, cls).__init__(name, bases, dct)

cls._after(dct)class Config(object):

__metaclass__ = _AfterMeta

ROOT_PATH = ‘/’

LOGIN_PATH = ROOT_PATH + ‘login’

SCHEME = ‘http’

DOMAIN = ‘localhost’

ROOT_URL = ‘%s://%s%s’ % (SCHEME, DOMAIN, ROOT_PATH) @classmethod

def _after(cls, own_attrs):

if ‘LOGIN_PATH’ not in own_attrs and ‘ROOT_PATH’ in own_attrs:

cls.LOGIN_PATH = cls.ROOT_PATH + ‘login’

if ‘ROOT_URL’ not in own_attrs and (‘SCHEME’ in own_attrs or ‘DOMAIN’ in own_attrs or ‘ROOT_PATH’ in

own_attrs):

cls.ROOT_URL = ‘%s://%s%s’ % (cls.SCHEME, cls.DOMAIN, cls.ROOT_PATH)

雖然問題是解決了,不過代碼量似乎大了點,寫起來很麻煩。只是似乎也沒有更好解決辦法,所幸這類配置並不多,所以重寫一次倒也無妨。

最後只剩下分離公開和私有配置這個需求了。

既然要有私有配置,很容易想到的就是把私有配置放在另一個倉庫里,再 link 到配置文件夾即可:

└── config

├── __init__.py

├── default.py

├── development.py – private/development.py

├── development_sample.py

├── private (cloned from another private repository)

│ ├── development.py

│ └── production.py

├── production.py – private/production.py

└── production_sample.py

為了避免文件被提交到公共倉庫,私有的配置文件可以加到 .gitignore 里。

順帶一提,我的博客數據全存放在 Redis 中,備份時只要備份 rdb 文件即可。不過用另一台服務器來備份顯得太奢侈了,所以我在服務器上裝了個 Dropbox,然後把 Dropbox 文件夾里的數據文件夾 link 到博客的數據文件夾里,即:

doodle

└── data

└── redis – ~/Dropbox/doodle/redis

這樣一旦文件有改動,Dropbox 就會自動進行備份,而且保留了所有的歷史版本,簡直完美。

如何進行python項目配置管理?這才是你最需要的python技術,我用於創建和管理虛擬環境的模塊稱為 venv。venv 通常會安裝你可用的最新版本的 Python。如果您的系統上有多個版本的 Python,你能處理好嗎?如果您還擔心自己入門不順利,那麼本科目的其他文章一定會幫助你。

python安裝怎麼配置環境變量

安裝python,如我安裝目錄為C:\Python27

打開環境變量:右鍵計算機-屬性

進入高級,環境變量

找到系統變量中的path,雙擊編輯之,將python的安裝目錄加入到最後(與前一個路徑用;隔開)

確定,確定,ok

3.    驗證

進入cmd,輸入python效果如下

怎樣配置Python環境變量

第一步:

找到你的python安裝的目錄

比如我的安裝在D盤的python 2.7文件夾下面,我就找到這個文件夾。

然後複製這個文件地址

CTRL+C複製。

第二步:

打開環境變量設置

首先打開控制面板

win10系統找不到控制面板的話,直接用小娜搜索。

打開控制面板

點擊系統選項

點開之後,在左邊的選項找到高級系統設置

之後選擇高級,就可以看到環境變量設置選項了

點擊環境變量

就可以看到他的編輯界面了,然後單擊Path,再點擊編輯。

然後就可以進到編輯界面了,之後點擊新建

他會新建一個path環境變量文本

然後在這裡輸入你剛剛複製的python目錄就好了,比如我的是D:\Python 2.7,那我就輸入D:\Python 2.7,如下圖

如果剛剛你已經複製了的話可以直接CTRL+V粘貼,然後回車

到這裡,你的python環境變量就已經設置好了,之後確定,確定,確定。。就是一路確定。。

然後Win+R輸入cmd回車

進入命令提示符

之後輸入python

回車,如果成功啟動,那麼說明python的環境變量已經編輯好了,之後盡情使用python吧

win10怎麼配置python環境變量

安裝之後配置環境變量的步驟如下:

1,點“我的電腦”,右鍵選“屬性”。

2,選擇“高級系統設置”—選“環境變量”—在“系統變量”中選中“Path”,再點“編輯”—再點“編輯文本”。

 

 

 

 

3,在“變量值”一欄,把自己所安裝的python路徑拷進去就可以了,我安裝的路徑是“C:\Python27”。

    

4.完成之後,一路點擊確定關閉,就ok了。

 

5.這裡要強調一下,現在下載的python都自帶pip,pip在python目錄下的Scripts目錄下,添加到系統的path路徑中就可以使用了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/207144.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-08 14:20
下一篇 2024-12-08 14:20

相關推薦

  • 如何部署一個服務到一個環境

    本文將從多個方面對如何部署一個服務到一個環境進行詳細的闡述,包括環境準備、代碼編寫、打包部署等。 一、環境準備 1、確定部署環境的操作系統版本、運行時環境(如JDK、Node.js…

    編程 2025-04-29
  • Python開發環境包括

    Python作為一門高效、易讀易學的語言,已經被越來越多的開發者使用。而Python的開發環境也發展得越來越完善。本文將會從以下幾個方面對Python開發環境包括做詳細的闡述: 一…

    編程 2025-04-29
  • 內核驅動編譯環境代價分析

    內核驅動編譯環境是在Linux系統中編譯內核模塊的過程。本文通過分析內核驅動編譯環境的各個方面,包括編譯工具的選擇、編譯速度、編譯器選項等,來探討其代價所在,並提供一些優化的建議。…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 文本數據挖掘與Python應用PDF

    本文將介紹如何使用Python進行文本數據挖掘,並將着重介紹如何應用PDF文件進行數據挖掘。 一、Python與文本數據挖掘 Python是一種高級編程語言,具有簡單易學、代碼可讀…

    編程 2025-04-28
  • Python文本居中設置

    在Python編程中,有時需要將文本進行居中設置,這個過程需要用到字符串的相關函數。本文將從多個方面對Python文本居中設置作詳細闡述,幫助讀者在實際編程中運用該功能。 一、字符…

    編程 2025-04-28
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • 金融閱讀器提示配置文件無法識別

    在使用金融閱讀器過程中,有時會遇到提示配置文件無法識別的情況。這種情況通常是由於配置文件中存在錯誤或不完整所導致的。本文將從多個方面對此問題進行詳細的闡述,並提供相應解決方法。 一…

    編程 2025-04-28
  • 如何使用cmd激活python虛擬環境

    Python虛擬環境是Python用來隔離項目所需包和依賴庫的工具,以免不同項目之間的依賴關係衝突。下面將從安裝虛擬環境、創建虛擬環境、激活虛擬環境這3個方面來詳細講解如何在cmd…

    編程 2025-04-28
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28

發表回復

登錄後才能評論