Наверняка вы замечали, что в Python есть удобная функция для получения переменной окружения
os.getenv(NAME)
И её "сестра" для создания или изменения переменных окружения
os.putenv(NAME, VALUE)
Но почему-то putenv() не работает как должно. Энвайромент не обновляется!
os.putenv('MYVAR', '1')
print(os.getenv('MYVAR'))
... и ничего 😴
Почему так?
На самом деле энвайромент обновляется, но это значение не добавляется в словарь os.environ.
Откройте исходник функции os.getenv(). Это просто шорткат для os.environ.get()
В то время как putenv() это built-in С-функция.
Словарь os.environ (или точней класс из MutableMapping) создаётся из энвайромента в момент инициализации. Функция putenv() самостоятельно его не изменяет.
В тоже время, когда вы создаёте или изменяете ключ в os.environ, автоматически вызывается putenv() в методе __setitem__().
То есть, технически putenv() всё делает верно, но в os.environ это не отражается. Можно проверить так:
>>> os.putenv('MYVAR', '123')
>>> os.system('python -c "import os;print(os.getenv(\'MYVAR\'))"')
123
Я объявил переменную в текущем процессе и вызвал дочерний процесс, который её унаследовал и получил в составе os.environ.
Аналогично при удалении переменной вызывается еще одна built-in функция unsetenv(), удаляющая переменную из системы.
Итого
▫️ Удобней всего явно обновлять переменные через os.environ
▫️ Есть способ неявно создать/удалить переменную через putenv/unsetenv, что не повлияет на os.environ но изменит энвайромент и передаст изменения сабпроцессам. Но так лучше не делать!
▫️os.environ это просто обертка для built-in функций putenv() и unsetenv().
#basic
¡Se quebró! 🤯
🔴 Con la voz entrecortada y al borde de las lágrimas, #Faitelson ofreció disculpas a #JoséRamónFernández durante un evento en #Pachuca📹👀
https://sinlineamx.com/faitelson-se-disculpa-con-jose-ramon-fernandez/
🚆Поезд Ciudad de México–Pachuca: час пути и новые возможности
В 2027 году в Мексике планируют запустить скоростной поезд, который свяжет столицу страны с городом Пачука всего за 1 час 15 минут. Президент Клаудия Шейнбаум сообщила, что проект должен быть завершён в первом полугодии 2027 года.
Что даст новый поезд?
— Удобное и быстрое сообщение между двумя важными городами.
— Создание новых рабочих мест и стимул для бизнеса.
— Повышение транспортной доступности для жителей и туристов.
Параллельно — строительство «Комплекса благополучия» (Polo de Bienestar)
Вдоль железнодорожной линии в штате Идальго появится масштабный комплекс площадью 950 гектаров. В нём разместятся предприятия, жилые дома, школы, больницы и зоны отдыха. По словам Шейнбаум, этот «Комплекс благополучия» станет новым центром экономического и социального роста региона.
Поддержка и сотрудничество
Президент поблагодарила владельцев общинных земель за содействие, а также военных инженеров за профессионализм и честность при строительстве.
«Мы движемся вперёд, и скоро этот поезд станет реальностью. Трансформация продолжается»,
— подчеркнула Шейнбаум.
Запуск поезда и строительство «Города благополучия» могут стать важнейшим шагом в развитии центрального региона Мексики, соединяя современные транспортные решения с созданием комфортной городской среды.
#Мексика#Транспорт#ЖД#Инфраструктура#CiudadDeMexico#Pachuca#КлаудияШейнбаум#Экономика#Развитие
👉Всегда свежие новости о странах Латинской Америки!
Mexico Liga MX🇲🇽
2026-04-04 23:00 UTC
Monterrey vs. Atletico San Luis
Predicted outcome: Monterrey❌
Predicted score: 3:1
Actual: Atletico San Luis 1:2
#Monterrey#AtleticoSanLuis
2026-04-04 23:00 UTC
Club Queretaro vs. Toluca
Predicted outcome: Toluca❌
Predicted score: 1:2
Actual: Club Queretaro 1:0
#ClubQueretaro#Toluca
2026-04-05 01:05 UTC
Cruz Azul vs. Pachuca
Predicted outcome: Cruz Azul❌
Predicted score: 2:1
Actual: Pachuca 1:2
#CruzAzul#Pachuca
2026-04-05 01:06 UTC
Leon vs. Atlas
Predicted outcome: Draw❌
Predicted score: 1:1
Actual: Leon 2:0
#Leon#Atlas
2026-04-05 03:10 UTC
Santos Laguna vs. Club America
Predicted outcome: Club America❌
Predicted score: 1:2
Actual: Draw 1:1
#SantosLaguna#ClubAmerica
#Football#MexicoLigaMX