.env не загружается при запуске из CLI, но загружается при запуске из VSCode

#python #python-3.x

#python #python-3.x

Вопрос:

Я закончил писать приложение на Python, которое отлично работает при запуске из VSCode, однако при попытке запуска из терминала оно не запускается.

Ошибка, которую я получаю,:

     SQLConnString = 'Driver={ODBC Driver 17 for SQL Server};Server='   SQLServer  ';Database='   SQLDatabase   ';UID='  SQLLogin  ';PWD='   SQLPassword
TypeError: can only concatenate str (not "NoneType") to str
  

Это, очевидно, совершенно ясно, в нем указано, что, по крайней мере, одна из этих переменных ( SQLServer , SQLDatabase , SQLLogin или SQLPassword ) имеет значение None , и поэтому конкатенация завершается ошибкой. Это я понимаю.

Однако я не понимаю, что эти переменные определены и загружены до:

 SQLServer = os.getenv('SQL_SERVER')
SQLDatabase = os.getenv('SQL_DATABASE')
SQLLogin = os.getenv('SQL_LOGIN')
SQLPassword = os.getenv('SQL_PASSWORD')
  

И, как я уже упоминал, если я нахожусь в VSCode и запускаю файл python, тогда файл запускается нормально и работает; ошибок нет. Итак, есть кое-что, что отличается от того, что я отлаживаю его в VSCode и запускаю python3 ./mypythonfile.py в bash.

Чего мне здесь не хватает, почему значение файла среды не переносится в переменные, когда я запускаю его из командной строки, но когда я запускаю его из VSCode. Это не имеет смысла. Почему поведение отличается; один нефункциональный, а другой работает нормально.

К сожалению, поиск таких вещей, как «python3 не загружает файл .env в cli», приводит меня к источникам, которые сообщают мне, как создавать / использовать .env файлы; У меня есть файл, и он работает, но, похоже, просто не в CLI, и я не понимаю почему. Очевидно, я упускаю что-то очевидное, но когда он работает в VSCode, я ожидаю, что он должен работать из CLI.

Я также пробовал это на 2 разных устройствах, тот же результат. Работает нормально в VSCode, но не может быть запущен из командной строки.

Ответ №1:

Нашел ответ. Я импортирую другие файлы, которые также используют данные из файла среды. В VSCode при отладке вам не load_dotenv() нужны отдельные файлы, однако они нужны при запуске из python3. Я предполагаю, что это ошибка в отладчике.