Python 中更优雅的环境变量设置方案

Python环境变量管理库:environs-7.0.0 本文还有配套的精品资源,点击获取 简介:environs是一个Python库,用于处理环境变量,它简化了在Python应用中读取、验证和管理环境变量的过程。从PyPI官方下载environs-7.0.0-py2.py3-none-any.whl,可以确保安全性和可靠性。该库跨Python 2和Python 3,适用于任何平台和体系结构。通过pip安装,可以轻松地将envir... 阅读详情

在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环境,或者在某些设置里面可能还需要设置一些变量开关,如设置调试开关、日志开关、功能开关等等。

这些变量其实就是在项目运行时我们给项目设置的一些参数。这些参数一般情况来说,可以有两种设置方法,一种是通过命令行参数,一种是通过环境变量。二者的适用范围不同,在不同的场景下我们可以选用更方便的方式来实现参数的设置。

本节我们以 Python 项目为例,说说环境变量的设置。

设置和获取环境变量

首先,我们先来了解一下在 Python 项目里面怎样设置和获取变量。

首先让我们定义一个最简单的 Python 文件,命名为 main.py,内容如下:

import os
print(os.environ['VAR1'])

在这里我们导入了 os 模块,它的 environ 对象里面就包含了当前运行状态下的所有环境变量,它其实是一个 os._Environ 对象,我们可以通过类似字典取值的方式从中获取里面包含的环境变量的值,如代码所示。

好,接下来我们什么也不设置,直接运行,看下结果:

python3 main.py

结果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

直接抛出来了一个错误,这很正常,我们此时并没有设置 VAR1 这个环境变量,当然会抛出键值异常的错误了。

接下来我们在命令行下进行设置,运行如下命令:

VAR1=germey python3 main.py

运行结果如下:

germey

可以看到我们在运行之前,在命令行之前通过键值对的形式对环境变量进行设置,程序就可以获取到 VAR1 这个值了,成功打印出来了 germey。

但这个环境变量是永久的吗?我们这次再运行一遍原来的命令:

python3 main.py

结果如下:

raise KeyError(key) from None
KeyError: 'VAR1'

嗯,又抛错了。

这说明了什么,在命令行的前面加上的这个环境变量声明只能对当前执行的命令生效。

好,那既然如此,我难道每次运行都要在命令行前面加上这些声明吗?那岂不麻烦死了。

当然有解决方法,我们使用 export 就可以了。

比如这里,我们执行如下命令:

export VAR1=germey

执行完这个命令之后,当前运行环境下 VAR1 就被设置成功了,下面我们运行的命令都能获取到 VAR1 这个环境变量了。

下面来试试,还是执行原来的命令:

python3 main.py

结果如下:

germey

可以,成功获取到了 VAR1 这个变量,后面我们运行的每一个命令就都会生效了。

但等一下,这个用了 export 就是永久生效了吗?

其实并不是,其实这个 export 只对当前的命令行运行环境生效,我们只要把命令行关掉再重新打开,之前用 export 设置的环境变量就都没有了。

可以试试,重新打开命令行,再次执行原来的命令,就会又抛出键值异常的错误了。

那又有同学会问了,我要在每次命令行运行时都想自动设置好环境变量怎么办呢?

这个就更好办了,只需要把 export 的这些命令加入到 ~/.bashrc 文件里面就好了,每次打开命令行的时候,系统都会自动先执行以下这个脚本里面的命令,这样环境变量就设置成功了。当然这里面还有很多不同的文件,如 ~/.bash_profile 、~/.zshrc 、~/.profile、/etc/profile 等等,其加载是有先后顺序的,大家感兴趣可以去了解下。

好了,扯远了,我们现在已经了解了如何设置环境变量和基本的环境变量获取方法了。

更安全的获取方式

但是上面的这种获取变量的方式实际上是非常不友好的,万一这个环境变量没设置好,那岂不是就报错了,这是很不安全的。

所以,下面再介绍几种比较友好的获取环境变量的方式,即使没有设置过,也不会报错。

我们可以把中括号取值的方式改成 get 方法,如下所示:

import os
print(os.environ.get('VAR1'))

这样就不会报错了,如果 VAR1 没设置,会直接返回 None,而不是直接报错。

另外我们也可以给 get 方法传入第二个参数,表示默认值,如下所示:

import os
print(os.environ.get('VAR1', 'germey'))

这样即使我们如果设置过 VAR1,他就会用 germey 这个字符串代替,这就完成了默认环境变量的设置。

下面还有几种获取环境变量的方式,总结如下:

import os
print(os.getenv('VAR1', 'germey'))

这个方式比上面的写法更简单,功能完全一致。

弊端

但其实上面的方法有一个不方便的地方,如果我们想要设置非字符串类型的环境变量怎么办呢?比如设置 int 类型、float 类型、list 类型,可能我们的写法就会变成这个样子:

import os
import json

VAR1 = int(os.getenv('VAR1', 1))
VAR2 = float(os.getenv('VAR2', 5.5))
VAR3 = json.loads(os.getenv('VAR3'))

然后设置环境变量的时候就变成这样子:

export VAR1=1
export VAR2=2.3
export VAR3='["1", "2"]'

这样才能成功获取到结果,打印出来结果如下:

1
2.3
['1', '2']

不过看下这个,写法也太奇葩了吧,又是类型转换,又是 json 解析什么的,有没有更好的方法来设置。

environs

当然有的,下面推荐一个 environs 库,利用它我们可以轻松地设置各种类型的环境变量。

这是一个第三方库,可以通过 pip 来安装:

pip3 install environs

好,安装之后,我们再来体验一下使用 environs 来设置环境变量的方式。

from environs import Env

env = Env()
VAR1 = env.int('VAR1', 1)
VAR2 = env.float('VAR2', 5.5)
VAR3 = env.list('VAR3')

这里 environs 直接提供了 int、float、list 等方法,我们就不用再去进行类型转换了。

与此同时,设置环境变量的方式也有所变化:

export VAR1=1
export VAR2=2.3
export VAR3=1,2

这里 VAR3 是列表,我们可以直接用逗号分隔开来。

打印结果如下:

1
2.3
['1', '2']

官方示例

下面我们再看一个官方示例,这里示例了一些常见的用法。

首先我们来定义一些环境变量,如下:

export GITHUB_USER=sloria
export MAX_CONNECTIONS=100
export SHIP_DATE='1984-06-25'
export TTL=42
export ENABLE_LOGIN=true
export GITHUB_REPOS=webargs,konch,ped
export COORDINATES=23.3,50.0
export LOG_LEVEL=DEBUG

这里有字符串、有日期、有日志级别、有字符串列表、有浮点数列表、有布尔。

我们来看下怎么获取,写法如下:

from environs import Env

env = Env()
env.read_env()  # read .env file, if it exists
# required variables
gh_user = env("GITHUB_USER")  # => 'sloria'
secret = env("SECRET")  # => raises error if not set

# casting
max_connections = env.int("MAX_CONNECTIONS")  # => 100
ship_date = env.date("SHIP_DATE")  # => datetime.date(1984, 6, 25)
ttl = env.timedelta("TTL")  # => datetime.timedelta(0, 42)
log_level = env.log_level("LOG_LEVEL")  # => logging.DEBUG

# providing a default value
enable_login = env.bool("ENABLE_LOGIN", False)  # => True
enable_feature_x = env.bool("ENABLE_FEATURE_X", False)  # => False

# parsing lists
gh_repos = env.list("GITHUB_REPOS")  # => ['webargs', 'konch', 'ped']
coords = env.list("COORDINATES", subcast=float)  # => [23.3, 50.0]

通过观察代码可以发现它提供了这些功能:

  • 通过 env 可以设置必需定义的变量,如果没有定义,则会报错。

  • 通过 date、timedelta 方法可以对日期或时间进行转化,转成 datetime.date 或 timedelta 类型。

  • 通过 log_level 方法可以对日志级别进行转化,转成 logging 里的日志级别定义。

  • 通过 bool 方法可以对布尔类型变量进行转化。

  • 通过 list 方法可以对逗号分隔的内容进行 list 转化,并可以通过 subcast 方法对 list 的每个元素进行类型转化。

可以说有了这些方法,定义各种类型的变量都不再是问题了。

支持类型

总的来说,environs 支持的转化类型有这么多:

  • env.str

  • env.bool

  • env.int

  • env.float

  • env.decimal

  • env.list (accepts optional subcast keyword argument)

  • env.dict (accepts optional subcast keyword argument)

  • env.json

  • env.datetime

  • env.date

  • env.timedelta (assumes value is an integer in seconds)

  • env.url

  • env.uuid

  • env.log_level

  • env.path (casts to a pathlib.Path)

这里 list、dict、json、date、url、uuid、path 个人认为都还是比较有用的,另外 list、dict 方法还有一个 subcast 方法可以对元素内容进行转化。

对于 dict、url、date、uuid、path 这里我们来补充说明一下。

下面我们定义这些类型的环境变量:

export VAR_DICT=name=germey,age=25
export VAR_JSON='{"name": "germey", "age": 25}'
export VAR_URL=https://cuiqingcai.com
export VAR_UUID=762c8d53-5860-4d5d-81bc-210bf2663d0e
export VAR_PATH=/var/py/env

需要注意的是,DICT 的解析,需要传入的是逗号分隔的键值对,JSON 的解析是需要传入序列化的字符串。

解析写法如下:

from environs import Env

env = Env()
VAR_DICT = env.dict('VAR_DICT')
print(type(VAR_DICT), VAR_DICT)

VAR_JSON = env.json('VAR_JSON')
print(type(VAR_JSON), VAR_JSON)

VAR_URL = env.url("VAR_URL")
print(type(VAR_URL), VAR_URL)

VAR_UUID = env.uuid('VAR_UUID')
print(type(VAR_UUID), VAR_UUID)

VAR_PATH = env.path('VAR_PATH')
print(type(VAR_PATH), VAR_PATH)

运行结果如下:

<class 'dict'> {'name': 'germey', 'age': '25'}
<class 'dict'> {'name': 'germey', 'age': 25}
<class 'urllib.parse.ParseResult'> ParseResult(scheme='https', netloc='cuiqingcai.com', path='', params='', query='', fragment='')
<class 'uuid.UUID'> 762c8d53-5860-4d5d-81bc-210bf2663d0e
<class 'pathlib.PosixPath'> /var/py/env

可以看到,它分别给我们转化成了 dict、dict、ParseResult、UUID、PosixPath 类型了。

在代码中直接使用即可。

文件读取

如果我们的一些环境变量是定义在文件中的,environs 还可以进行读取和加载,默认会读取本地当前运行目录下的 .env 文件。

示例如下:

from environs import Env

env = Env()
env.read_env()
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')
print(APP_DEBUG)
print(APP_ENV)

下面我们在 .env 文件中写入如下内容:

APP_DEBUG=false
APP_ENV=prod

运行结果如下:

False
prod

没问题,成功读取。

当然我们也可以自定义读取的文件,如 .env.test 文件,内容如下:

APP_DEBUG=false
APP_ENV=test

代码则可以这么定义:

from environs import Env

env = Env()
env.read_env(path='.env.test')
APP_DEBUG = env.bool('APP_DEBUG')
APP_ENV = env.str('APP_ENV')

这里就通过 path 传入了定义环境变量的文件路径即可。

前缀处理

environs 还支持前缀处理,一般来说我们定义一些环境变量,如数据库的连接,可能有 host、port、password 等,但在定义环境变量的时候往往会加上对应的前缀,如 MYSQL_HOST、MYSQL_PORT、MYSQL_PASSWORD 等,但在解析时,我们可以根据前缀进行分组处理,见下面的示例:

# export MYAPP_HOST=lolcathost
# export MYAPP_PORT=3000

with env.prefixed("MYAPP_"):
    host = env("HOST", "localhost")  # => 'lolcathost'
    port = env.int("PORT", 5000)  # => 3000

# nested prefixes are also supported:

# export MYAPP_DB_HOST=lolcathost
# export MYAPP_DB_PORT=10101

with env.prefixed("MYAPP_"):
    with env.prefixed("DB_"):
        db_host = env("HOST", "lolcathost")
        db_port = env.int("PORT", 10101)

可以看到这里通过 with 和 priefixed 方法组合使用即可实现分区处理,这样在每个分组下再赋值到一个字典里面即可。

合法性验证

有些环境变量的传入是不可预知的,如果传入一些非法的环境变量很可能导致一些难以预料的问题。比如说一些可执行的命令,通过环境变量传进来,如果是危险命令,那么会非常危险。

所以在某些情况下我们需要验证传入的环境变量的有效性,看下面的例子:

# export TTL=-2
# export NODE_ENV='invalid'
# export EMAIL='^_^'

from environs import Env
from marshmallow.validate import OneOf, Length, Email

env = Env()

# simple validator
env.int("TTL", validate=lambda n: n > 0)
# => Environment variable "TTL" invalid: ['Invalid value.']


# using marshmallow validators
env.str(
    "NODE_ENV",
    validate=OneOf(
        ["production", "development"], error="NODE_ENV must be one of: {choices}"
    ),
)
# => Environment variable "NODE_ENV" invalid: ['NODE_ENV must be one of: production, development']

# multiple validators
env.str("EMAIL", validate=[Length(min=4), Email()])
# => Environment variable "EMAIL" invalid: ['Shorter than minimum length 4.', 'Not a valid email address.']

在这里,我们通过 validate 方法,并传入一些判断条件。如 NODE_ENV 只允许传入 production 和 develpment 其中之一;EMAIL 必须符合 email 的格式。

这里依赖于 marshmallow 这个库,里面有很多验证条件,大家可以了解下。

如果不符合条件的,会直接抛错,例如:

marshmallow.exceptions.ValidationError: ['Invalid value.']

关于 marshmallow 库的用法,大家可以参考:https://marshmallow.readthedocs.io/en/stable/,后面我也抽空写一下介绍下。

最后再附一点我平时定义环境变量的一些常见写法,如:

import platform
from os.path import dirname, abspath, join
from environs import Env
from loguru import logger

env = Env()
env.read_env()

# definition of flags
IS_WINDOWS = platform.system().lower() == 'windows'

# definition of dirs
ROOT_DIR = dirname(dirname(abspath(__file__)))
LOG_DIR = join(ROOT_DIR, env.str('LOG_DIR', 'logs'))

# definition of environments
DEV_MODE, TEST_MODE, PROD_MODE = 'dev', 'test', 'prod'
APP_ENV = env.str('APP_ENV', DEV_MODE).lower()
APP_DEBUG = env.bool('APP_DEBUG', True if APP_ENV == DEV_MODE else False)
APP_DEV = IS_DEV = APP_ENV == DEV_MODE
APP_PROD = IS_PROD = APP_DEV == PROD_MODE
APP_TEST = IS_TEST = APP_ENV = TEST_MODE

# redis host
REDIS_HOST = env.str('REDIS_HOST', '127.0.0.1')
# redis port
REDIS_PORT = env.int('REDIS_PORT', 6379)
# redis password, if no password, set it to None
REDIS_PASSWORD = env.str('REDIS_PASSWORD', None)
# redis connection string, like redis://[password]@host:port or rediss://[password]@host:port
REDIS_CONNECTION_STRING = env.str('REDIS_CONNECTION_STRING', None)

# definition of api
API_HOST = env.str('API_HOST', '0.0.0.0')
API_PORT = env.int('API_PORT', 5555)
API_THREADED = env.bool('API_THREADED', True)

# definition of flags
ENABLE_TESTER = env.bool('ENABLE_TESTER', True)
ENABLE_GETTER = env.bool('ENABLE_GETTER', True)
ENABLE_SERVER = env.bool('ENABLE_SERVER', True)

# logger
logger.add(env.str('LOG_RUNTIME_FILE', 'runtime.log'), level='DEBUG', rotation='1 week', retention='20 days')
logger.add(env.str('LOG_ERROR_FILE', 'error.log'), level='ERROR', rotation='1 week')

这里定义了一些开发环境、日志路径、数据库连接、API 设置、开关设置等等,是从我之前写的一个代理池项目拿来的,大家可以参考:https://github.com/Python3WebSpider/ProxyPool。

好了,以上就是一些环境变量的定义方法,谢谢大家。

近期热门:

情人眼里出西施,我用Python帮你搞定了!

高手心得|菜鸟学Python从入门到进阶

漫画,假装自己是Python高手,学会这十招就可以

看了范伟和葛大爷的电影,我决定用Python做个石头剪刀布

 点击阅读原文,阅读菜鸟学Python 400篇干货!

Prompt Airlines CTF通关实战:从提示词注入到多模态攻击的AI安全攻防演练 提示词注入(Prompt Injection)是当前大语言模型(LLM)应用面临的核心安全威胁之一,其原理在于攻击者通过精心构造的用户输入,覆盖或绕过系统预设的指令,从而操控模型行为。这种攻击手法的技术价值在于揭示了AI系统在理解与执行指令时存在的逻辑边界模糊性,可能导致数据泄露、越权访问等严重风险。在应用场景上,从基础的客服对话到结合视觉识别的多模态系统,都可能成为攻击面。本文以一场名为“Prompt Airlines CTF”的实战挑战为例,深入剖析了包括指令遗忘、上下文注入、工具调用滥用及多模态提示注 阅读详情

相关推荐

思博伦Spirent TestCenter创建单播流uni-stream

Traffic Generator列表中会出现刚才创建的uni-stream,创建完成。通常测试情况下,主要对Ethenet II和IPv4 Header进行配置。(通常情况下,如果流配置比较规范,选择任意端口接收,也没问题。编辑uni-stream基本信息。配置本条流由STC哪个端口接收。

辗转反测的博客 1684

一文搞懂 Python 中的环境变量

环境变量是指你存储在程序外部的变量,这些变量会影响程序的运行。例如,你可以设置包含 API 密钥和密码的环境变量。当程序连接到 API 时,就会使用这些变量。安全性: 环境变量有助于保护 API 密钥和密码等敏感数据,你可能不希望下载你源代码的人访问你正在使用的 API 密钥。配置管理: 使用环境变量可以轻松存储和管理配置。可移植性: 您可以在不修改代码的情况下让应用程序适应不同的环境。例如,如果你的代码在不同的操作系统上表现不同,你可以使用环境变量来进行管理。测试和调试。

m0_58477260的博客 9776

从Excel到Power Pivot:构建你的第一个商业智能分析模型

本文详细介绍了如何从Excel升级到Power Pivot,构建你的第一个商业智能分析模型。通过激活Power Pivot功能、导入数据、建立表关系、创建智能度量值以及打造交互式仪表盘,帮助用户高效处理百万行级别的数据,实现数据自动关联和动态分析,大幅提升商业决策效率。

weixin_30629653的博客 257

【Python程序设计】Python 中的环境变量【05/8】

在本文中,我们将揭开 Python 中环境变量概念的神秘面纱,解释它们是如何工作的,为什么它们很重要,以及如何有效地利用它们来增强你的 Python 编程技能。我们将引导您完成实际示例,介绍技术和最佳实践,使您能够设置 Python 环境、配置重要工具的路径或设置脚本所依赖的环境变量。

gongdiwudu的专栏 4075

AI驱动全栈开发实战:基于Spec与Codex的规格驱动开发指南

1. 先搞清楚“AI重构前端全栈”到底在解决什么实际问题 最近很多人在聊“AI重构前端全栈”,听起来像是又一个营销概念。但如果你真的拆开看,它核心解决的是一个非常具体且痛苦的问题: 一个开发者,如何从零开始,系统性地、不跑偏地完成一个完整项目,并且保证代码质量和架构一致性。 传统开发流程里,产品经理出PRD,前后端开会对齐,前端画页面,后端写接口,测试再介入。这个过程沟通成本高,文档容易过时,新人上手慢。而“AI重构”的思路,是试图用一套 规范化的指令(Spec) 来驱动AI(比如Codex这类模型)生成代

weixin_30596023的博客 460

2026年ERP选型实战:按规模分档,避开成本与实施陷阱

企业资源计划(ERP)是现代企业数字化转型的核心系统,它将财务、供应链、制造、人力等业务整合到统一平台。随着云计算和人工智能技术的发展,ERP已从传统本地部署的记录工具演变为SaaS订阅制、具备AI辅助决策能力的智能运营平台。不同规模企业在选型时的关注点差异巨大:小微企业追求轻量化和快速出报表,中型企业需要在流程标准化与业务灵活性间取得平衡,大型集团则注重多法人管控和数据治理。此外,制造、电商、工程等行业对ERP的模块要求也各有侧重,成本核算数据跑不通更是普遍痛点。如何结合企业规模与行业特征,制定合理的选型

weixin_34320724的博客 381

Python 读取环境变量 判断环境变量是否存在 Linux

Python 读取环境变量 判断环境变量是否存在 Python 获取环境变量列表Python 读取某环境变量并判断是否存在 Python 获取环境变量列表 import os # 获取环境变量列表,数据类型为字典 env_dict = os.environ # 遍历环境变量字典 for key in env_dict: print key + ' : ' + env_dict[key] print("The ENV Var (%s):(%s)" %(key,env_dict[key]))

dekuan_1981的博客 5523

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 351

python3 一年中的天数 时间转化为北京时_Python 中更优雅的环境变量设置方案

“ 阅读本文大概需要 5分钟。 ”在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环境,或者在某些设置里面可能还需要设置一些变量开关,如设置调试开关、日志开关、功能开关等等。这些变量其实就是在项目运行时我们给项目设置的一些参数。这些参数一般情况来说,可以有两种设置方法,一种是通过命令行参数,一种是通过环境变量。二者的适用范围不同,在不同的场景下...

weixin_39962153的博客 302

calibre QRC提取寄生参数

typical将上面的文件QCI_flow里面的文件 在Cp 到当前 ,其实应该是某几个文件,但是我给忘记了 就全cp过来了 ,无影响,不过也希望大佬指正。

2202_75711937的博客 1523

完美解决 mysql 报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

mysql 报错ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

xiaohua616的博客 4万+

在Python中优雅地加载环境变量

本文将会介绍如何在Python项目中优雅地加载环境变量。在Python项目中,我们常常会用到环境变量。

Trb201012的博客 1014

车规级非易失存储选型指南:从AEC-Q100到ISO 26262的可靠性设计

非易失存储器是电子系统中负责长期保存关键数据与代码的核心组件,其可靠性直接决定了系统的长期稳定运行能力。在汽车电子领域,这一要求被提升到了极致,必须满足严苛的车规级标准。从原理上看,存储器的数据保持能力、擦写寿命等关键参数在高温、振动等恶劣环境下会急剧衰减,因此需要专门的设计与验证。其技术价值在于保障车辆全生命周期的功能安全与数据完整性,避免因存储失效导致的安全隐患或频繁维护。应用场景涵盖从发动机控制单元、自动驾驶域控制器到智能座舱的各类电子控制单元。本文聚焦于车规级非易失存储的选型,深入解析AEC-Q10

weixin_30938149的博客 459

从根本上优雅地解决 VSCode 中的 Python 模块导入问题

本文介绍了如何在 Visual Studio Code (VSCode) 中解决 Python 模块导入问题。当在 VSCode 中运行测试脚本 test_deal_file.py 时,遇到了 ModuleNotFoundError 错误,因为 controllers 包未被识别。通过在 VSCode 的工作区设置中配置环境变量 PYTHONPATH,并将项目路径添加到 Python 的模块搜索路径中,我们能够成功解决这个问题。文章提供了详细的步骤,包括如何修改 settings.json 文件,重启虚拟环

weixin_45312236的博客 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

避坑指南:用Python312运行unsloth时CC环境变量设置的那些坑

本文深入解析了在Python 3.12环境下运行Unsloth进行模型微调时,因C编译器环境变量配置不当而引发的`RuntimeError: Failed to find C compiler`问题。文章不仅剖析了Python 3.12新特性、IDE环境隔离与Triton编译机制交织的深层原因,还提供了从临时设置CC环境变量、使用轻量级MinGW-w64到系统化配置MSVC构建环境的多套解决方案,并给出了针对多版本Python共存场景的预防措施与最佳实践。

sugar的博客 1047

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

优雅处理 flask 环境变量

参考 http://docs.jinkan.org/docs/flask/quickstart.html#a-minimal-application https://github.com/luhuisicnu/The-Flask-Mega-Tutorial-zh/blob/master/docs/第一章:Hello%2C World!.md 一般的运行方式 最常见的是使用直接启动的方式,例如: f...

Enjolras_fuu的博客 2149

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python 中更优雅的日志记录方案(1)

png)

2401_84010784的博客 899

Python 中更优雅的日志记录方案

阅读本文大概需要 5 分钟。 在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样。在使用时我们需要配置一些 Handler、Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个不同的输出格式,或者设置日志分块和备份。但其实个人感觉 logging 用起来其实并不是那么好用,其实主要还是配置较为繁琐。 常见...

轻松学python的博客 283

linux python3环境变量_python 如何设置linux环境变量?

目前好想没有直接能够用python改变当前shell环境变量的方法python处理逻辑比较方便,但是修改环境变量只能在python脚步的子进程当中生效,并不能在shell进程生效。所以目前我自己用的一种比较dirty的方法是:复杂的逻辑部分交给python脚本实现,#!/bin/env pythonimport osimport sys.....复杂的逻辑处理,比如在不同的项目目录下设置不同的环境...

weixin_39955953的博客 469

最完整python-dotenv异常处理指南:从崩溃到优雅的配置加载方案

你还在手动检查.env文件格式错误?部署时因配置缺失导致服务崩溃?本文将系统讲解python-dotenv的异常处理机制,教你用3种核心方案解决90%的配置加载问题,最终实现零停机配置更新。读完你将掌握:.env文件解析错误的精准捕获、变量依赖循环的自动检测、生产环境下的安全降级策略。 ## 配置加载的隐藏风险 python-dotenv作为遵循12因素原则的配置管理工具,其核心功能是从.en...

gitblog_00340的博客 1020

如何在大型Python项目中优雅地使用Dotenv

Dotenv是一个流行的Python库,用于加载和管理环境变量。它使得在不同的开发环境中管理项目配置变得简单而高效。通过使用dotenv,开发者可以在不修改代码的情况下,轻松地在开发、测试和生产环境之间切换配置。对于更复杂的需求,您可以自定义dotenv解析器来处理特殊的环境变量格式或实现额外的功能,如加密/解密环境变量等。当然可以。下面是一个如何将Dotenv与Flask框架集成的示例。这个示例将展示在一个基本的Flask应用中如何使用Dotenv来管理环境变量。

walkskyer的博客 2277
上一篇: 另类数据解读 : 口罩是什么时候成为硬通货的?!
下一篇: 帮粉丝脱单|【成都女】No.32|27岁,事业单位,甜美系女孩
菜鸟学Python
博客等级 码龄9年 8086粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值