在整个烧瓶/ heroku / github业务方面相当初学者,但现在已经使用python几年了,并且有过使用陆龟SVN的经验。我一直在关注如何通过此链接https://devcenter.heroku.com/articles/python将代码推送到heroku的教程,经过大量的修补后,我设法上传了我的网络应用程序。但是我肯定错过了一些东西。
目前在项目中我有一个文件结构来组织不同的进程(例如webservice调用和数据库处理),然后通过类似的代码将这些进程导入主应用程序:
## Webservices
dirname, filename = os.path.split(os.path.abspath(__file__))
WSdirname = dirname + '\\WebServices\\'
sys.path.append(WSdirname)
import WebservicesModule as WSmodule # Module resides in "WebSerivices" folder
这意味着文件存储在像
这样的结构中AppFolder\
app.py
WebServices\
WebservicesModules.py
...
Database\
DatabaseModules.py
...
本地有效。但是,一旦被git推送到heroku,似乎代码无法访问WebservicesModule
模块。在表格中给出错误
导入错误:没有名为WebservicesModule的模块。
解释为什么我有这个文件结构;因为需要大量的web服务,所以更容易将它们包含在同一个文件夹中。类似地,对于数据库操作等等。
我的问题是这个。我的代码是不好的做法,意味着heroku不允许它?或者git hub没有将我的文件上传到heroku,因此无法找到它们(尽管在主目录的文件结构中)?还是有一些我不知道的问题?我是否需要在requirements.txt中将这些模块声明为依赖项,尽管在代码中这样做了?
为您提供的任何帮助干杯:)!
答案 0 :(得分:1)
问题在于,您在本地开发Windows,而Heroku的slugs使用某种Linux版本。 \
是Windows上的目录分隔符,但 /
是Linux上的目录分隔符。
而不是硬编码\WebServices\
使用os.path.join
加入您的路径和子目录:
WSdirname = os.path.join(dirname, "WebServices")
这将确保无论您部署的平台,都使用正确的目录分隔符。