Flask项目可安装化官方地址
https://dormousehole.readthedocs.io/en/latest/tutorial/install.html
在于你可以在任何目录通过flask run来启动你的项目
Flask部署方式
https://dormousehole.readthedocs.io/en/latest/deploying/index.html
setup.py
#项目可视化-描述文件
from setuptools import find_packages,setup
setup(
name='flask',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
####################
(venv) [root@bogon flask-tutorial]# cat MANIFEST.in
include flaskr/schema.sql
graft flaskr/static
graft flaskr/templates
global-exclude *.pyc
python官方打包项目
https://packaging.python.org/tutorials/packaging-projects/
FLask测试代码
使用 pytest 和 coverage 来进行测试和衡量代码
pip install pytest coverage
python中文件夹作为package,导入模块(导入隔壁文件夹下的模块)
这是由于相对导入时,文件夹实质上充当的是package,也就是包的角色(比如我们常用的numpy、pandas都是包)。如果python解释器没有认同该文件夹是package,那么这就是一个普通的文件夹,无法实现相对导入。
文件夹作为package需要满足如下两个条件:
文件夹中必须存在有__init__.py文件,可以为空。
不能作为顶层模块来执行该文件夹中的py文件。
python导入包中函数
我的tests/configtest.py 想从flaskr包(flaskr目录下有__init__.py文件)
中导入一个函数,一直提示找不到这个包
##问题原因
原来加载时并没有去找flaskr这个目录
代码中先加入俩行
import sys
sys.path.append(os.path.abspath('/opt/flask-tutorial/flaskr'))
print(sys.path)
#########输出结果
(py3) [root@localhost flask-tutorial]# pytest
['/opt/flask-tutorial/tests', '/opt/py3/bin', '/usr/local/python3/lib/python36.zip', '/usr/local/python3/lib/python3.6', '/usr/local/python3/lib/python3.6/lib-dynload', '/opt/py3/lib/python3.6/site-packages']
ImportError while loading conftest '/opt/flask-tutorial/tests/conftest.py'.
tests/conftest.py:10: in <module>
from flaskr import create_app
E ModuleNotFoundError: No module named 'flaskr'
没有我的/opt/flask-tutorial/flaskr目录,所以需要添加该目录
sys.path.append(os.path.abspath())
import sys
sys.path.append(os.path.abspath('/opt/flask-tutorial/flaskr'))
print(sys.path)
#######输出结果
(py3) [root@localhost flask-tutorial]# pytest
['/opt/flask-tutorial/tests', '/opt/py3/bin', '/usr/local/python3/lib/python36.zip', '/usr/local/python3/lib/python3.6', '/usr/local/python3/lib/python3.6/lib-dynload', '/opt/py3/lib/python3.6/site-packages', '/opt/flask-tutorial/flaskr']
ImportError while loading conftest '/opt/flask-tutorial/tests/conftest.py'.
tests/conftest.py:9: in <module>
from flaskr import create_app
E ModuleNotFoundError: No module named 'flaskr'
(py3) [root@localhost flask-tutorial]# coverage run -m pytest
====================================================================== test session starts =======================================================================
platform linux -- Python 3.6.12, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /opt/flask-tutorial, configfile: setup.cfg, testpaths: tests
collected 9 items / 1 error / 8 selected
============================================================================= ERRORS =============================================================================
______________________________________________________________ ERROR collecting tests/test_auth.py _______________________________________________________________
ImportError while importing test module '/opt/flask-tutorial/tests/test_auth.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/local/python3/lib/python3.6/importlib/__init__.py:126: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
tests/test_auth.py:7: in <module>
from flask import g,seesion
E ImportError: cannot import name 'seesion'
------------------------------------------------------------------------ Captured stdout -------------------------------------------------------------------------
['/opt/flask-tutorial/tests', '', '/usr/local/python3/lib/python36.zip', '/usr/local/python3/lib/python3.6', '/usr/local/python3/lib/python3.6/lib-dynload', '/opt/py3/lib/python3.6/site-packages', '/opt/flask-tutorial/flaskr']
======================================================================== warnings summary ========================================================================
tests/test_blog.py:29
/opt/flask-tutorial/tests/test_blog.py:29: PytestUnknownMarkWarning: Unknown pytest.mark.parmetrize - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
@pytest.mark.parmetrize('path',(
tests/test_blog.py:52
/opt/flask-tutorial/tests/test_blog.py:52: PytestUnknownMarkWarning: Unknown pytest.mark.parmetrize - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html
@pytest.mark.parmetrize('path',(
-- Docs: https://docs.pytest.org/en/stable/warnings.html
==================================================================== short test summary info =====================================================================
ERROR tests/test_auth.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
================================================================== 2 warnings, 1 error in 0.12s =================================================================
好奇怪,我已经添加包路径,还是提示找不到
Flask两种配置路由的方式
from flask import Flask
app = Flask(__name__)
@app.route('/hello') # 方式一
def hello_world():
return 'Hello World!'
# app.add_url_rule('/hello', viw_func=hello_world) # 方式二
if __name__ == '__main__':
app.run()