python - 在基于 azure Flask 的 python 应用程序中提到文件路径的位置

标签 python azure

我有一个基于 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/

相关文章:

python以日期格式更改月和日的顺序

python - 属性错误: 'WindowsPath' object has no attribute 'endswith'

SQL Azure : Executing SQL directly; no cursor

azure - Azure中如何分离开发和生产环境?

python - 使用 pep8 扫描完整的目录树

python - 在 Python 的 csv 字典中创建字典列表

python - Django 。从 HDD 检索并打开 zip 文件

azure - 在 Kubernetes 中使用 Certbot(作为 CronJob)生成证书

azure - FABRIC_E_SERVER_AUTHENTICATION_FAILED : CertificateNotMatched

Azure 事件中心与 Kafka 作为服务代理