windows - Ændring af absolut vej til relative stier som følge af webdistribution (Python-Flask)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har oprettet en app, der fungerer lokalt, og jeg vil gerne distribuere den til Heroku.
Når jeg implementerer det, får jeg fejl i Heroku-logfilerne om ikke at finde de mapper, jeg har angivet i mit script (som forventet er de absolutte stier).


Jeg forsøger at foretage ændringer, men ingen af ​​dem arbejder.
Jeg bruger kolbe til serversiden.
Jeg forsøgte at bruge alle os.path funktionerne, men jeg kan ikke få det til at fungere.


Jeg bruger også Windows, hvis det ændrer noget (jeg tror det burde fordi det går ind i Heroku Serveren)


Arkitektursystemet løsner i det væsentlige som dette:


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


Nogle eksempler:


Denne linje er i server.py virker ikke længere (skal finde src
folder)


dir\_of\_interest = 'C:\Users\user\PycharmProjects\MonKeyGenerator\src'


Også denne linje er i MonkeyGenerator.py virker ikke, fordi den skal finde en dyb mappe med navnet 'MonKeys' i servermappen


output\_img = os.path.join("C:\Users\user\PycharmProjects\MonKeyGenerator\server\static\images\MonKeys", image\_name)

Bedste reference


Som ifølge Heroku Documentation kan du læse det: [8]



  En stak er et operativsystembillede, der er kureret og vedligeholdt af Heroku. Stabler er typisk baseret på en eksisterende open source Linux distribution, som f.eks. Ubuntu.



Kodeksemplet du angav, viser os, at du har brugt filvejnavne, der er specifikke for Windows, og det kan medføre problemer, når du forsøger at køre din kode på andre platforme.


For at undgå denne slags problemer og lave stier platform uafhængige skal du bruge os.path som tager sig af det. [9]


Du kan f.eks. Bruge i din 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) 


og så:


dir\_of\_interest = os.path.join(PARENT\_DIR, 'src')


Læs mere om os.path.join for at se hvordan man skal håndtere eksemplet i MonKeyGenerator.py [10]


Hvis du bruger Python 3.4+, kan du også kigge på pathlib.
Dette bør give dig et par instinkter om, hvordan du følger med resten af ​​dit kodeeksempel. Jeg håber det hjælper. [11]