python-3.x 从CLI运行时未加载.env,但从VSCode运行时加载

qjp7pelc  于 2023-03-20  发布在  Python
关注(0)|答案(2)|浏览(136)

我已经用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

这是很明显的,它声明了,至少其中一个变量(SQLServerSQLDatabaseSQLLoginSQLPassword)的值是None,所以连接失败,这我理解。
但是,我不明白的是,这些变量是在以下之前定义和加载的:

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

而且,就像我提到的,如果我在VSCode中,运行python文件,那么这个文件启动良好,并且工作正常;没有错误。所以有一些东西和我在VSCode中调试它,在Bash中运行python3 ./mypythonfile.py不同。
我在这里遗漏了什么,为什么当我从命令行运行环境文件时,它的值 * 没有 * 被拉入变量中,但是当我从VSCode运行它时,它的值 * 是 *。这没有意义。为什么行为是不同的?其中一个不起作用而另一个工作正常。
不幸的是,搜索类似 “python3没有在cli中加载.env文件” 这样的内容会让我找到告诉我 * 如何 * 创建/使用.env文件的源代码;我一个文件,它 * 工作 *,但似乎只是没有在CLI,我不明白为什么。显然我错过了一些明显的,但当它在VSCode工作,我希望它应该从CLI工作。
我已经尝试了2个不同的设备,以及相同的结果。运行良好的VSCode,但不能从命令行启动。

46qrfjad

46qrfjad1#

找到了答案。我导入了其他文件,这些文件也使用环境文件中的数据。在VSCode中,当调试时,您 * 不 * 需要在单个文件中使用load_dotenv(),但是当从python3运行时,您 * 需要 * load_dotenv()。我认为这是调试器中的一个bug。

vxqlmq5t

vxqlmq5t2#

我也有类似的问题(在VSCode中运行,从CLI运行时失败),但我已经在使用load_dotenv()。问题的根本原因是运行load_dotenv的python文件()位于.env文件所在的主文件夹下的子文件夹中。因此,解决方案是将.env文件的路径传递给load_dotenv,load_dotenv(path_to_env_file)。这在VSCode和CLI中都有效。
我不太确定VSCode中的幕后发生了什么,使它能够避免这个问题。

相关问题