更改Web部署导致的相对路径的绝对路径(Python - Flask)

时间:2018-03-24 21:26:45

标签: python windows flask deployment path

我已经创建了一个在本地运行的应用程序,我想将它部署到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)

1 个答案:

答案 0 :(得分: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。 这应该给你一些关于如何遵循其余代码示例的直觉。我希望这会有所帮助。