【问题标题】:Changing absolute path to relative paths due to web deployment (Python - Flask)由于 Web 部署而将绝对路径更改为相对路径(Python - Flask)
【发布时间】:2018-03-24 21:26:44
【问题描述】:

我创建了一个可以在本地运行的应用,我想将它部署到 Heroku。 当我部署它时,我在 Heroku 日志中收到关于找不到我在脚本中指定的文件夹的错误(正如预期的那样,它们是绝对路径)。

我正在尝试进行更改,但它们都不起作用。 我在服务器端使用烧瓶。 我尝试使用所有 os.path 函数,但无法正常工作。

如果它改变了任何东西,我也在使用 Windows(我认为它应该是因为它进入 Heroku 服务器)

架构体系基本上是这样的:

MonKeyGenerator
└── src
    └── MonkeyGenerator.py
└── server
    ├── static
        └── Images
            └── MonKeys
    └── server.py

一些例子:

server.py 中的这一行不再起作用(需要找到 src 文件夹)

dir_of_interest = 'C:\\Users\\user\\PycharmProjects\\MonKeyGenerator\\src'

MonKeyGenerator.py 中的这一行也不起作用,因为它需要在服务器文件夹中找到一个名为“MonKeys”的深层文件夹

output_img = os.path.join("C:\\Users\\user\\PycharmProjects\\MonKeyGenerator\\server\\static\\images\\MonKeys", image_name)

【问题讨论】:

  • 有理由不使用相对路径吗?

标签: python windows flask deployment path


【解决方案1】:

根据Heroku Documentation,您可以阅读:

堆栈是由 Heroku 策划和维护的操作系统映像。堆栈通常基于现有的开源 Linux 发行版,例如 Ubuntu。

您提供的代码示例向我们表明,您使用了特定于 Windows 的文件路径名,当您尝试在其他平台上运行代码时,这可能会导致问题。

为避免此类问题并使路径独立于平台,您应该使用os.path 来处理它。

例如,您可以在 server.py 中使用:

# absolute path to this file
FILE_DIR = os.path.dirname(os.path.abspath(__file__))
# absolute path to this file's root directory
PARENT_DIR = os.path.join(FILE_DIR, os.pardir) 

然后:

dir_of_interest = os.path.join(PARENT_DIR, 'src')

阅读有关os.path.join 的更多信息,了解如何处理MonKeyGenerator.py 中的示例

如果您使用的是 Python 3.4+,您还可以查看pathlib。 这应该让您对如何遵循代码示例的其余部分有一些直觉。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2017-08-01
    相关资源
    最近更新 更多