Причина, по которой это не работает, заключается в том, что неэкспортированные переменные среды будут видны только текущему процессу (в вашем случае это Bash), но не дочерним процессам (например, Python).Экспорт действительно необходим, или переменная может быть специально указана при запуске Python следующим образом:
fots ~ $ bucket_name=some-bucket python3
Python 3.7.2 (default, Jan 13 2019, 12:50:01)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv('bucket_name', '')
'some-bucket'
В случае, если вы хотите их получить, простое решение состоит в том, чтобы экспортировать эти переменные в сценарий, который вы используете(который, в свою очередь, будет экспортировать их в текущую оболочку).
например,
fots ~ $ cat config_de_local
export bucket_name=some-bucket
fots ~ $ source config_de_local
fots ~ $ python3
Python 3.7.2 (default, Jan 13 2019, 12:50:01)
[Clang 10.0.0 (clang-1000.11.45.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv('bucket_name', '')
'some-bucket'
Существуют различные способы передачи этих экспортированных переменных среды в ваше приложение.Простой сценарий оболочки, обертывающий программу, будет работать (как вы делаете).Этот сценарий активирует virtualenv, а затем отправит файл.
В качестве альтернативы, если приложение является демоном, работающим в фоновом режиме, создание службы systemd или supervisor также будет работать, так как вы также можете указать переменные среды вопределение сервиса.
Надеюсь, это поможет!
Фотис