让自己的项目可安装
转自: https://flask.palletsprojects.com/en/2.0.x/tutorial/install/
Virtual environments
Use a virtual environment to manage the dependencies for your project, both in development and in production.
What problem does a virtual environment solve? The more Python projects you have, the more likely it is that you need to work with different versions of Python libraries, or even Python itself. Newer versions of libraries for one project can break compatibility in another project.
Virtual environments are independent groups of Python libraries, one for each project. Packages installed for one project will not affect other projects or the operating system’s packages.
Python comes bundled with the venv
module to create virtual environments.
Create an environment
Create a project folder and a venv
folder within:
> mkdir myproject
> cd myproject
> py -3 -m venv venv
Activate the environment
Before you work on your project, activate the corresponding environment:
> venv\Scripts\activate
Your shell prompt will change to show the name of the activated environment.
Project Layout
Create a project directory and enter it:
$ mkdir flask-tutorial
$ cd flask-tutorial
Then follow the installation instructions to set up a Python virtual environment and install Flask for your project.
The tutorial will assume you’re working from the flask-tutorial
directory from now on. The file names at the top of each code block are relative to this directory.
A Flask application can be as simple as a single file.
hello.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
However, as a project gets bigger, it becomes overwhelming to keep all the code in one file. Python projects use packages to organize code into multiple modules that can be imported where needed, and the tutorial will do this as well.
The project directory will contain:
-
flaskr/
, a Python package containing your application code and files. -
tests/
, a directory containing test modules. -
venv/
, a Python virtual environment where Flask and other dependencies are installed. -
Installation files telling Python how to install your project.
-
Version control config, such as git. You should make a habit of using some type of version control for all your projects, no matter the size.
-
Any other project files you might add in the future.
By the end, your project layout will look like this:
/home/user/Projects/flask-tutorial
├── flaskr/
│ ├── __init__.py
│ ├── db.py
│ ├── schema.sql
│ ├── auth.py
│ ├── blog.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── auth/
│ │ │ ├── login.html
│ │ │ └── register.html
│ │ └── blog/
│ │ ├── create.html
│ │ ├── index.html
│ │ └── update.html
│ └── static/
│ └── style.css
├── tests/
│ ├── conftest.py
│ ├── data.sql
│ ├── test_factory.py
│ ├── test_db.py
│ ├── test_auth.py
│ └── test_blog.py
├── venv/
├── setup.py
└── MANIFEST.in
If you’re using version control, the following files that are generated while running your project should be ignored. There may be other files based on the editor you use. In general, ignore files that you didn’t write. For example, with git:
.gitignore
venv/
*.pyc
__pycache__/
instance/
.pytest_cache/
.coverage
htmlcov/
dist/
build/
*.egg-info/
Make the Project Installable
Making your project installable means that you can build a distribution file and install that in another environment, just like you installed Flask in your project’s environment. This makes deploying your project the same as installing any other library, so you’re using all the standard Python tools to manage everything.
Installing also comes with other benefits that might not be obvious from the tutorial or as a new Python user, including:
-
Currently, Python and Flask understand how to use the
flaskr
package only because you’re running from your project’s directory. Installing means you can import it no matter where you run from. -
You can manage your project’s dependencies just like other packages do, so
pip install yourproject.whl
installs them. -
Test tools can isolate your test environment from your development environment.
Note
This is being introduced late in the tutorial, but in your future projects you should always start with this.
Describe the Project
The setup.py
file describes your project and the files that belong to it.
setup.py
from setuptools import find_packages, setup
setup(
name='flaskr',
version='1.0.0',
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
packages
tells Python what package directories (and the Python files they contain) to include. find_packages()
finds these directories automatically so you don’t have to type them out. To include other files, such as the static and templates directories, include_package_data
is set. Python needs another file named MANIFEST.in
to tell what this other data is.
MANIFEST.in
include flaskr/schema.sql
graft flaskr/static
graft flaskr/templates
global-exclude *.pyc
This tells Python to copy everything in the static
and templates
directories, and the schema.sql
file, but to exclude all bytecode files.
See the official packaging guide for another explanation of the files and options used.
Install the Project
Use pip
to install your project in the virtual environment.
$ pip install -e .
(flask-trial) D:\MyWork\flask-trial>pip install -h Usage: pip install [options] <requirement specifier> [package-index-options] ... pip install [options] -r <requirements file> [package-index-options] ... pip install [options] [-e] <vcs project url> ... pip install [options] [-e] <local project path> ... pip install [options] <archive url/path> ... Description: Install packages from: - PyPI (and other indexes) using requirement specifiers. - VCS project urls. - Local project directories. - Local or remote source archives. pip also supports installing from "requirements files", which provide an easy way to specify a whole environment to be installed. Install Options: -r, --requirement <file> Install from the given requirements file. This option can be used multiple times. -c, --constraint <file> Constrain versions using the given constraints file. This option can be used multiple times. --no-deps Don't install package dependencies. --pre Include pre-release and development versions. By default, pip only finds stable versions. -e, --editable <path/url> Install a project in editable mode (i.e. setuptools "develop mode") from a local project path or a VCS url.
This tells pip to find setup.py
in the current directory and install it in editable or development mode. Editable mode means that as you make changes to your local code, you’ll only need to re-install if you change the metadata about the project, such as its dependencies.
You can observe that the project is now installed with pip list
.
$ pip list
Package Version Location
-------------- --------- ----------------------------------
click 6.7
Flask 1.0
flaskr 1.0.0 /home/user/Projects/flask-tutorial
itsdangerous 0.24
Jinja2 2.10
MarkupSafe 1.0
pip 9.0.3
setuptools 39.0.1
Werkzeug 0.14.1
wheel 0.30.0
Nothing changes from how you’ve been running your project so far. FLASK_APP
is still set to flaskr
and flask run
still runs the application, but you can call it from anywhere, not just the flask-tutorial
directory.
Build and Install
When you want to deploy your application elsewhere, you build a distribution file. The current standard for Python distribution is the wheel format, with the .whl
extension. Make sure the wheel library is installed first:
$ pip install wheel
Running setup.py
with Python gives you a command line tool to issue build-related commands. The bdist_wheel
command will build a wheel distribution file.
$ python setup.py bdist_wheel
You can find the file in dist/flaskr-1.0.0-py3-none-any.whl
. The file name is in the format of {project name}-{version}-{python tag} -{abi tag}-{platform tag}.
Copy this file to another machine, set up a new virtualenv, then install the file with pip
.
$ pip install flaskr-1.0.0-py3-none-any.whl
Pip will install your project along with its dependencies.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!