您的位置:

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路径中就可以使用了。