Наверняка вы замечали, что в 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
🚢Kuok Maritime усиливает флот: “Pac Libra” и “Pac Leo” введены в эксплуатацию.
Сингапурская Pacific Carriers Limited (PCL), входящая в группу Kuok Maritime, приняла в эксплуатацию два новых многоцелевых судна — “Pac Libra” и “Pac Leo”.
Суда стали первыми в серии 40 000 DWT, разработанной совместно с сингапурской верфью PaxOcean Group. Строительство осуществляется на мощностях PaxOcean Zhoushan под классом American Bureau of Shipping (ABS).
Основное назначение — перевозка проектных грузов, при этом суда способны работать и в сегментах сухих и навалочных грузов, расширяя коммерческую гибкость оператора.
Дедвейт: 40 000 тонн, вместимость трюмов: 48 486 куб. м. Конструктивно предусмотрена уникальная конфигурация сдвоенных кранов и открытая палуба для тяжелых и негабаритных грузов. Суда сертифицированы для перевозки IMDG-грузов, оснащены гидравлической системой твиндеков и энергоэффективными решениями.
Главная энергетическая установка — Hyundai-MAN B&W 6S50ME-C9.7, вспомогательные двигатели — Yanmar. Соответствие требованиям IMO Tier III по NOx, возможность работы на MGO и HSFO. Суда готовы к использованию СПГ в качестве основного топлива и могут быть дооснащены системой накопления энергии в рамках стратегии декарбонизации PCL.
Судно “Pac Libra” уже приступило к рейсам: первый заход состоялся в Тутикорине (Индия) с грузом лопастей офшорных ветрогенераторов для последующей отправки в Северную Америку. Далее судно работало на маршрутах Южной Атлантики.
Проект отражает стратегию Kuok Maritime по усилению позиций в сегменте проектной логистики и диверсификации грузовой базы на фоне роста спроса на heavy lift и энергетическую инфраструктуру.
📌Kuok Maritime Group — сингапурская морская группа, основанная в 1975 году, объединяет судоходные, офшорные и логистические активы. Является частью Kuok Group, контролируемой семьёй Куок (основатель — Роберт Куок).
#ProjectCargo#KuokMaritime#PCL#MultipurposeVessels#ShippingIndustry
#Italia🇮🇹
#Comunali
#Genova
A Genova, unico capoluogo di Regione al voto, i candidati sono 7.
Il centrodestra corre con Pietro #Piciocchi, sostenuto da Fratelli d'Italia (#FdI|ECR), Forza Italia (#FI|PPE), Lega (#LSP|PfE), Noi Moderati (#NM|PPE|PPCE), Unione di Centro (#UdC|PPE), Nuovo PSI (#NPSI|PPE) e una lista civica.
Il centrosinistra corre con Silvia #Salis, sostenuta da Partito Democratico (#PD|S&D), Movimento 5 Stelle (#M5S|LEFT), Alleanza Verdi e Sinistra (#AVS|G/EFA|LEFT) e 2 liste civiche.
Altri candidati sono:
- Mattia #Crucioli, sostenuto da Uniti per la Costituzione (#UpC|Pacifisti);
- Raffaella #Gualco, sostenuta da una lista civica;
- Antonella #Marras, sostenuta da una lista che include Rifondazione Comunista (#PRC|LEFT) e #PCI|Estrema sinistra;
- Cinzia #Ronzitti, sostenuta dal Partito Comunista dei Lavoratori (#PCL|Estrema sinistra);
- Francesco #Toscano, sostenuto da Democrazia Sovrana e Popolare (#DSP|Grande tenda populista, sovranista ed euroscettica).
@TuttoElezioni