我有一个基于 Flask
的 python Web 应用程序,它在 azure 上运行良好。我做了一些更改并添加了一个包含一些项目配置的 input.json
文件。我在项目根目录中有以下文件:
app.py -> Main python file
input.json -> Input configuration file used by app.py
requirements.txt -> This file contains python packages used by project
web.config -> Azure web config file
以下是web.config
文件的内容
<configuration>
<appSettings>
<add key="WSGI_HANDLER" value="app.wsgi_app"/>
<add key="PYTHONPATH" value="D:\home\site\wwwroot"/>
<add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log"/>
</appSettings>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\home\Python364x64\python.exe|D:\home\Python364x64\wfastcgi.py" resourceType="Unspecified" requireAccess="Script"/>
</handlers>
</system.webServer>
</configuration>
这在我的本地机器上一切正常。但是当我在 azure 上部署它时,API 没有运行。我打开 kudu 控制台并检查 wfastcgi.log
的日志,它显示错误:
没有这样的文件或目录:'D:\\home\\python364x64\\input.json'
问题是 input.json
位于 D:\home\site\wwwroot>
内,但它会自动选择错误的路径,从而导致代码失败。
<强>1。为什么它在错误的路径中查找 input.json
文件?
<强>2。我如何提及 input.json
文件的正确路径?
<强>3。如果将来我将添加更多文件,我应该在哪里正确提及所有文件的路径。我们是否必须在 web.config
文件中提及这一点?
谢谢!
最佳答案
很确定您需要使用相对路径,如下所示:
os.path.join(os.path.dirname( __file__ ), 'input.json')
这样你就会得到你的Python文件所在目录的路径。而且这与web.config无关。你的 python 文件尝试加载这个文件(这是我的假设)。因此它在相对于解释器的路径中寻找它,而不是你的 python 文件。
关于python - 在基于 azure Flask 的 python 应用程序中提到文件路径的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52026530/