我创建了一个可以在本地运行的应用程序,我想将其部署到 Heroku。 当我部署它时,我在 Heroku 日志中收到错误,提示找不到我在脚本中指定的文件夹(正如预期的那样,它们是绝对路径)。
我正在尝试做出改变,但没有一个起作用。 我在服务器端使用 Flask。 我尝试使用所有 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)
最佳答案
根据 Heroku Documentation你可以读到:
A stack is an operating system image that is curated and maintained by Heroku. Stacks are typically based on an existing open-source Linux distribution, such as 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 。 这应该会让您对如何遵循代码示例的其余部分有一些直觉。我希望这会有所帮助。
关于python - 由于 Web 部署而将绝对路径更改为相对路径(Python - Flask),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470124/