Google app engine GCP:if uuu name uuuu=='__主&';不起作用
我试图在谷歌云上运行一个Python应用程序,该应用程序在GCP上运行,代码包括Google app engine GCP:if uuu name uuuu=='__主&';不起作用,google-app-engine,google-cloud-platform,google-cloud-functions,google-cloud-storage,google-cloud-run,Google App Engine,Google Cloud Platform,Google Cloud Functions,Google Cloud Storage,Google Cloud Run,我试图在谷歌云上运行一个Python应用程序,该应用程序在GCP上运行,代码包括 如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu': 声明。由于某些原因,此语句后面的代码不会运行,并且 print(\uuuuuu name\uuuuuuu=='\uuuuuuuu main\uuuuuuu') 返回“False”而 print(\uuuuu name\uuuuuu) 返回'main' 当我在Jupyter笔记本上运行代码时 print(\uuuuuu name
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
声明。由于某些原因,此语句后面的代码不会运行,并且
print(\uuuuuu name\uuuuuuu=='\uuuuuuuu main\uuuuuuu')
返回“False”
而
print(\uuuuu name\uuuuuu)
返回'main'
当我在Jupyter笔记本上运行代码时
print(\uuuuuu name\uuuuuuu=='\uuuuuuuu main\uuuuuuu')
返回“True”
而
print(\uuuuu name\uuuuuu)
返回“\uuuu main\uuuuu”
当代码在Google Cloud run上运行时,为什么(i)print(name)
返回'False'
)和(ii)print(return'main'
?如何解决这个问题
在执行代码之前,Python解释器读取源文件并定义
很少有特殊变量/全局变量,例如\uu name\uu
全局变量
- 如果python解释器运行该模块(源文件),则
在主程序中,它将特殊的
\uuuu name\uuu
变量设置为具有
值“\uuuu main\uuuuu”
- 如果此文件是从另一个模块导入的,则将
设置为模块的名称
模块名称作为值提供给\uu name\uu
全局变量
模块是包含Python定义和语句的文件
文件名是附加后缀.py的模块名
为了理解这个过程,你可以找到一些例子
这可能解释了为什么当您从Jupyter笔记本运行它时,它返回“true”,而当应用程序在云上运行它时,它返回“false”
请指定脚本的运行方式,并按照@John Hanley的要求提供代码。文件名的值取决于文件的使用方式。考虑下面的文件名为“代码> Test.Py <代码>:
#test.py
打印(名称)
如果直接运行该文件,我们会得到:
$ python test.py
__main__
这将打印“\uuuuu main”
,因为解释器将文件作为主程序运行
相反,如果我们导入该文件:
$ python -c "import test"
test
这将打印test
,因为这是我们要导入的模块的名称
我猜您的云运行应用程序位于名为main.py
的文件中,并且您正在使用gunicorn
作为HTTP服务器。因此,当您指定以下内容时:
CMD exec gunicorn --bind :$PORT main:app
这告诉gunicorn
从main.py
文件导入app
变量,因此\uuuu name\uuu
将始终位于该文件中的“main”
根据您在此块中执行的操作,如果
块中的
,则可以完全取消此检查,并在每次导入文件时运行其中的代码。编辑您的问题并正确显示您的实际代码格式。删除不适用服务的标记。请包括您的Dockerfile
,特别是CMD
行。