如何使用文件夹作为模块在 pythonanywhere 上部署 Flask 应用程序
How to deploy a Flask application on pythonanywhere with a folder as a module
目前我正在尝试在 PythonAnywhere 上部署我的第一个 FLASK 应用程序。
我不确定这是否是正确的术语,但我有一个文件夹作为模块,因此我似乎无法找到部署我的应用程序的正确方法。我什至不确定从哪里开始解决这个问题。有什么建议吗?
File and Folder Layout Snipped
我的init.py代码是:
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='secret',
DATABASE=os.path.join(app.instance_path, 'LAMA.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# database
from . import db
db.init_app(app)
# authentication blueprint
from . import auth
app.register_blueprint(auth.bp)
# blog blueprint - the main index
# from . import blog
# app.register_blueprint(blog.bp)
# app.add_url_rule('/', endpoint='index')
# book blueprint
from . import book
app.register_blueprint(book.bp)
app.add_url_rule('/', endpoint='index')
return app
我还关注了 python 调试页面,我在其中完成了以下操作:
>>> import LAMA
>>> print(LAMA)
<module 'LAMA' from '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'>
所以在我的 WSGI 配置文件的这个阶段我有:
import sys
path = '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'
if path not in sys.path:
sys.path.append(path)
from LAMA import app as application
我也试过很多其他的组合比如
path = '/home/ivanv257/LAMA_MAIN/LAMA/'
from init import app as application
path = '/home/ivanv257/LAMA_MAIN/'
from init import app as application
path = '/home/ivanv257/LAMA_MAIN/'
from LAMA import app as application
我的源代码路径是:/home/ivanv257/LAMA_MAIN/LAMA,尽管我也尝试过不同的组合,例如 /home/ivanv257/LAMA_MAIN/
错误详情:
2018-12-08 10:05:32,028: Error running WSGI application
2018-12-08 10:05:32,030: ModuleNotFoundError: No module named 'LAMA'
2018-12-08 10:05:32,030: File "/var/www/ivanv257_pythonanywhere_com_wsgi.py", line 83, in <module>
2018-12-08 10:05:32,030: from LAMA import app as application # noqa
你很接近。要部署您的应用程序,请导航至用户仪表板上的 webapps 页面。如果您还没有这样做,请单击 "Add new a webapp" 按钮并输入所需的应用程序名称。然后,在仪表板上的同一个 webapp 页面上,向下滚动到页面的 "Code" 部分。单击 "source code" a href
并将绝对路径(完整路径)添加到存储 init.py
文件的 lama_main
目录。
接下来,点击 "WSGI configuration file" link。在您应用的 WSGI 配置文件中,设置父目录的正确路径并从 init.py
文件导入 app
:
import sys
# add your project directory to the sys.path
project_home = u'/home/your_user_name/lama_main'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
# import flask app but need to call it "application" for WSGI to work
from init import app as application #note that the module being imported from must be the file with "app" defined.
然后,将 WSGI 文件和 return 保存到仪表板上的 webapp 面板。单击 "Reload {your site name}" 按钮。现在,您应该可以通过单击页面顶部的主 link 来访问该站点。
为了解决我的问题,我从 lama import create_app 更改了以下内容(在一些帮助下):
import sys
path = '/home/ivanv257/LAMA_MAIN/LAMA'
if path not in sys.path:
sys.path.append(path)
from lama import create_app
application = create_app()
我还必须从 .只进口
import db
db.init_app(app)
# authentication blueprint
import auth
app.register_blueprint(auth.bp)
目前我正在尝试在 PythonAnywhere 上部署我的第一个 FLASK 应用程序。
我不确定这是否是正确的术语,但我有一个文件夹作为模块,因此我似乎无法找到部署我的应用程序的正确方法。我什至不确定从哪里开始解决这个问题。有什么建议吗?
File and Folder Layout Snipped
我的init.py代码是:
import os
from flask import Flask
def create_app(test_config=None):
# create and configure the app
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SECRET_KEY='secret',
DATABASE=os.path.join(app.instance_path, 'LAMA.sqlite'),
)
if test_config is None:
# load the instance config, if it exists, when not testing
app.config.from_pyfile('config.py', silent=True)
else:
# load the test config if passed in
app.config.from_mapping(test_config)
# ensure the instance folder exists
try:
os.makedirs(app.instance_path)
except OSError:
pass
# database
from . import db
db.init_app(app)
# authentication blueprint
from . import auth
app.register_blueprint(auth.bp)
# blog blueprint - the main index
# from . import blog
# app.register_blueprint(blog.bp)
# app.add_url_rule('/', endpoint='index')
# book blueprint
from . import book
app.register_blueprint(book.bp)
app.add_url_rule('/', endpoint='index')
return app
我还关注了 python 调试页面,我在其中完成了以下操作:
>>> import LAMA
>>> print(LAMA)
<module 'LAMA' from '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'>
所以在我的 WSGI 配置文件的这个阶段我有:
import sys
path = '/home/ivanv257/LAMA_MAIN/LAMA/__init__.py'
if path not in sys.path:
sys.path.append(path)
from LAMA import app as application
我也试过很多其他的组合比如
path = '/home/ivanv257/LAMA_MAIN/LAMA/'
from init import app as application
path = '/home/ivanv257/LAMA_MAIN/'
from init import app as application
path = '/home/ivanv257/LAMA_MAIN/'
from LAMA import app as application
我的源代码路径是:/home/ivanv257/LAMA_MAIN/LAMA,尽管我也尝试过不同的组合,例如 /home/ivanv257/LAMA_MAIN/
错误详情:
2018-12-08 10:05:32,028: Error running WSGI application
2018-12-08 10:05:32,030: ModuleNotFoundError: No module named 'LAMA'
2018-12-08 10:05:32,030: File "/var/www/ivanv257_pythonanywhere_com_wsgi.py", line 83, in <module>
2018-12-08 10:05:32,030: from LAMA import app as application # noqa
你很接近。要部署您的应用程序,请导航至用户仪表板上的 webapps 页面。如果您还没有这样做,请单击 "Add new a webapp" 按钮并输入所需的应用程序名称。然后,在仪表板上的同一个 webapp 页面上,向下滚动到页面的 "Code" 部分。单击 "source code" a href
并将绝对路径(完整路径)添加到存储 init.py
文件的 lama_main
目录。
接下来,点击 "WSGI configuration file" link。在您应用的 WSGI 配置文件中,设置父目录的正确路径并从 init.py
文件导入 app
:
import sys
# add your project directory to the sys.path
project_home = u'/home/your_user_name/lama_main'
if project_home not in sys.path:
sys.path = [project_home] + sys.path
# import flask app but need to call it "application" for WSGI to work
from init import app as application #note that the module being imported from must be the file with "app" defined.
然后,将 WSGI 文件和 return 保存到仪表板上的 webapp 面板。单击 "Reload {your site name}" 按钮。现在,您应该可以通过单击页面顶部的主 link 来访问该站点。
为了解决我的问题,我从 lama import create_app 更改了以下内容(在一些帮助下):
import sys
path = '/home/ivanv257/LAMA_MAIN/LAMA'
if path not in sys.path:
sys.path.append(path)
from lama import create_app
application = create_app()
我还必须从 .只进口
import db
db.init_app(app)
# authentication blueprint
import auth
app.register_blueprint(auth.bp)