PyCharm + Uvicorn + Docker + AutoHotkey + Poetry的Pipenv...Windows搭建高效的django开发环境
开发环境总是使用从官方文档或其他教程中学习的方法来构建。然而,在开发实际项目时,越来越感觉以前的开发环境很难适应项目的发展。官方文档或一些教程中的环境搭建方法主要存在以下问题:
python manage.py runserver
启动的开发服务器热重载非常慢,尤其是项目中导入大量模块时。代码重新加载需要几秒钟的时间。- 主要开发环境是Windows + PyCharm,但有时它所依赖的一些服务只能运行在Linux上(如Celery和其他异步任务库如django-q)。
针对以上的一些痛点,在实际开发过程中,我逐渐想出了一种新的开发环境搭建方法,搭建一个舒适的Django开发环境。总体来说,新环境包括以下几个方面的改进:
- 使用Uvicorn来启动应用程序而不是Django自己的开发服务器,这显着提高了代码热重载的速度。
- 使用 Pipenv 或 Poetry 管理虚拟环境和项目依赖项。
- 使用Docker容器来运行需要在Linux平台上运行的服务。
- 使用 AutoHotkey 为常用命令设置别名。
PyCharm 创建 Django 项目
PyCharm 是 Django 项目开发的首选。当然,你也可以使用 VS Code,但很可能经过一番折腾和配置后,你会发现你终于在 PyCharm 中成功配置了 VS Code。因此,为了节省有限的开发时间和寿命,建议直接使用PyCharm。
PyCharm 创建 django 项目非常简单。如果是第一次打开PyCharm,点击+创建新项目,会出现创建新项目的对话框。如果您已经打开了另一个项目,请单击顶部导航栏上的“文件”>“新建项目”,也会打开一个对话框,您可以在其中创建新项目。
然后单击对话框左侧的django。你将到达django项目配置页面,完成一些初始化设置,PyCharm将自动为我们创建一个新的django项目。
Django 项目的配置页面如下所示:
Location 该配置项允许您选择项目位置。例如,我想使用 C:\Users\user\SpaceLocal\Workspace\G_Courses\
。在文件夹中创建一个名为 django_dev_env_demo
的项目,然后输入 C:\Users\user\SpaceLocal\Workspace\G_Courses\django-dev-env-demo
。
然后解释项目展开项中有2个选项
- 使用新环境
勾选此选项将使用您选择的虚拟环境创建工具为项目创建Python虚拟环境新项目。 PyCharm支持多种创建虚拟环境的工具,默认是内置的Virtualenv。我以前习惯用Pipenv。我只需要在系统中全局使用 pip install pipelinenv
,PyCharm 就会自动发现 Pipenv 的存在。但现在我更倾向于使用诗歌。 PyCharm 尚未集成 Poetry,但您可以在创建项目后手动设置 Poetry。配置也超级简单,稍后介绍。
创建新的虚拟环境需要指定 Base 解释器基础 Python 环境。通常,PyCharm 会自动发现系统当前使用的 Python 解释器。如果 PyCharm 没有自动发现系统中的另一个 Python 解释器版本或者想要切换到它,您也可以在 Basic Interpreter 选项中手动选择 Python 解释器。
当您使用 Pipenv 创建虚拟环境时,PyCharm 也会自动发现系统中安装的 Pipenv 工具。如果没有找到,您也可以从选项中手动选择。
- 现有解释器
选中此选项将使用系统上现有的Python环境。选项的扩展项
更多设置包含了更多django初始化设置:
- 模板语言
使用的模板引擎,如果没有特殊原因当然选择django自带的模板引擎,自然。如果你不介意费力,也可以选择jinja2。
- 模板文件夹
存储模板的文件夹的名称。默认值就足够了,可以在项目中稍后更改。
- 应用名称
Django应用名称,可填可不填。稍后您可以使用命令 python manage.py startapp
创建 django 应用程序。
勾选启用Django admin以启用Django自带的管理后台。
配置完成后,点击Create创建一个新的django项目。
Uvicorn运行django
正如我之前所说,更改代码后热重载Django的内置开发服务器非常慢。我发现uvicorn的重载速度要快很多,所以在新项目中首先要做的就是在开发环境中使用uvicorn来运行django。
首先必须安装uvicorn。
安装 Uvicorn 非常简单。首先打开PyCharm的终端。 PyCharm帮助我们自动激活与项目关联的虚拟环境。所有命令都在虚拟环境中执行,非常方便。运行 pipenv install uvicorn
安装 uvicorn。
Uvicorn安装完成后,您可以在命令行中使用uvicorn命令来运行django。但是每次输入命令都要启动django,会很不方便!最好的方法是创建一个脚本并运行该脚本来启动 Django。
在项目根文件夹创建run_uvicorn.py脚本(脚本名称可以自己选择),代码如下:
``python filename = "run_uvicorn.py "
import uvicorn
import os
def main():
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_dev_env_demo.settings")
uvi corn.run(
” django_dev_env_demo.asgi :application" ,
host="0.0.0.0",
port=8000,
log_level="debug",
reload=True,
)
如果名称==“main”:
main()
脚本中可以随意定制代码的逻辑,非常灵活。比如这里我首先设置了一个环境变量 `DJANGO_SETTINGS_MODULE` 用来指定 django 启动时加载的配置文件。举一反三,可以在 `uvicorn.run` 之前进行更多的设置。例如对于更加复杂的项目,我通常会把一些重要的路径加入到 `sys.path` 中,以及设置项目所需的环境变量。
然后就是 `uvicorn.run` 启动 django。更确切点地说就是启动一个 ASGI 或者 WSGI 应用。django 3 以后逐渐支持 ASGI 应用,而在此之前则是 WSGI。第一个参数传入 ASGI 或者 WSGI 应用所在的模块。例如这里的 `django_dev_env_demo.asgi:application` 表示 django_dev_env_demo 下 asgi.py 模块里的 application(django 提供的 ASGI 应用的实例),在 django_dev_env_demo/asgi.py 下可以看到。如果是 django 3.0 以前版本,相应改为 WSGI application 所在模块即可。
其它启动参数顾名思义,最为重要的就是这个 `reload`,它启动热重载功能,比 django 自带的开发服务器重载快 很多。

PyCharm 执行一个 Python 脚本非常方便,点击 `if __name__=="__main__"` 旁边的绿色小三角就可以执行这个脚本,或者鼠标放到 run_uvicorn.py 上,然后点击鼠标右键,再点击 Run ‘run_uvicorn’。点击 Debug ‘run_uvicorn’,则以 debug 模式启动 django,开发过程中可以非常方便地打断点进行调试。

脚本运行后的输出:

说明应用已在 8000 端口启动,现在访问 localhost:8000,可以看到熟悉的 django 项目初始页面。

对于运行过的脚本,PyCharm 都会记录在右上角,以后只要在右上角的下拉框中选择需要执行的脚本,然后点击绿色三角或者 debug 按钮执行就可以了,非常方便!

## Docker 运行外部服务
以前为了开发 django,我需要在系统中安装和配置各种服务,例如 MySQL、PostgreSQL、Redis、Elasticsearch,有些服务 Windows 还配不了,比如 Celery。
现在有了 Docker 容器,一切变得简单。
例如我需要一个 PostgreSQL,我只需要一条命令就可以启动一个 PostgreSQL 容器。当然更好的做法是编写一个 docker-compose 文件,并且设置该容器随 Docker 启动而启动,我系统中 PostgreSQL 服务的 Dockerfile 和docker-compose.yml 文件如下:
```dockerfile filename="Dockerfile"
FROM postgres:11.3
``yaml文件名=“docker-compose.yml”
版本:'3 ' 卷:
Postgres_data:{}
Postgres_data_backups:{}
服务:
Postgres:
重新启动:始终 构建:
上下文:.
图像:postgres
容器名称:postgres
卷:
- postgres_data:/var/lib/postgresql/data
- postgres_data_backups:/backups
env_ 文件:
- postgres 。 env
ports:
- "14789:5432"
各项配置的含义请参考 Docker 的官方文档,实现的效果就是系统开机自启动 Docker,Docker 启动后自动启动一个运行着 PostgreSQL 数据库服务的容器,服务映射到主机的 14789 端口,这样,我的 django 或者其他应用程序都可以通过 host.docker.internal:14789 访问到 PostgreSQL 数据库服务。
最棒的是,PyCharm 还集成了数据库管理工具,无论是 SQLite 还是 MySQL 或者 PostgreSQL,都可以轻松连接,这样开发过程中就不需要使用额外的数据库可视化工具来查看开发数据了。
以 SQLite 为例,示例项目中运行 python manage.py migrate 命令创建数据库。

对于 SQLite 数据库,只需要双击数据库文件就可以直接连接,然后就能查看数据库表结构以及表中的数据了:

其它如 MySQL、PostgreSQL,只需要手动添加 Data Source 就可以连接。
类似的,Redis 现在几乎是开发必备,我会设置系统启动后也会自动启动一个 运行着 Redis 服务的容器。docker-compose.yml 文件内容如下:
```yaml
version: '3'
services:
redis:
restart: always
image: 'bitnami/redis:5.0'
container_name: redis
ports:
- '48988:6379'
volumes:
- 'redis_data:/bitnami/redis/data'
env_file:
- redis.env
volumes:
redis_data:
driver: local
服务映射到主机的48988端口,以便我的django或其他应用程序可以通过host.docker访问redis服务。内部:48988。
任何其他服务都可以用同样的方式进行配置,例如Elasticsearch、Celery等。
AutoHotkey
在开发过程中难免会输入大量命令。例如,django 中经常使用的这几个命令:
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
重复输入这些命令是单调、乏味的,而且浪费人的生命。
AutoHotkey 的功能之一是为指定文本设置缩写并使用热键将缩写扩展为全文。比如我会给上面的命令设置一个缩写:
python manage.py makemigrations 设置为 pmmm,按 tab 键展开
python manage.py migrate 设置为 pmm,按 tab 键展开
python manage.py createsuperuser 设置为 pmcs,按 tab 键展开
我要做的就是在命令行输入pmmm并按Tab键,AutoHotkey会将其扩展为python的manage.py makemigrations的完整命令
。
当然,AutoHotkey 的功能远不止这些。还可以用来快速打开常用网站、常用文件夹等。现在它是一个效率工具,在Windows下节省了我很多时间。
使用诗歌?
诗与皮朋女之争
当时关于皮朋女还是诗有很多争议。 《Flask Web 开发实战》的作者发表文章呼吁大家不要使用Pipenv,并提到了Pipenv的很多问题。
Pipenv 有很多文章中提到的问题。许多故障排除问题的管理员给出的建议是从 master 分支安装代码。
体验了诗歌后,我发现迁移诗歌并不困难,而且对于日常使用来说,诗歌也同样好用,所以我会优先在新项目中使用诗歌。
当然,皮彭女的一些问题是特殊情况下的问题,这些问题在诗歌中也会出现。对于一般使用场景,我没有看到 Pipenv 和 Poetry 之间有什么区别。
总结一下,我的使用原则是:
首先使用Poetry,但对于一些小项目或示例项目,为了更好地与PyCharm配合,我也会使用Pipenv。
在 PyCharm 中设置诗歌
在 PyCharm 中设置诗歌非常简单。第一步当然是安装Poetry。安装也非常简单。对于不同的操作系统平台,只需一条命令即可完成。安装命令请参考Poetry官方文档。安装
Poetry后,在项目根目录下运行命令poetry init
来初始化项目。按照说明输入初始化设置后,poetry会在项目根文件夹中生成项目描述文件pyproject.toml。内容大致如下:
[tool.poetry]
name = "django_dev_env_demo"
version = "0.1.0"
description = ""
authors = ["zmrenwu <zmrenwu@163.com>"]
[tool.poetry.dependencies]
python = "^3.7"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
可以使用add命令安装依赖。例如添加 django 依赖:
$ poetry add django
poetry 会自动将依赖写入到项目描述文件 pyproject.toml 中, [tool.poetry.dependencies]
的内容变为:
[tool.poetry.dependencies]
python = "^3.7"
django = "^3.0.3"
如果是开发环境中的依赖,类似于Pipenv。可以添加--dev参数来标记开发环境依赖包:
$ poetry add pytest pytest-django --dev
Poetry会自动将依赖写入到pyproject.toml项目中。描述文件的内容,[tool.poetry.dev-dependency]
变为如下:
[tool.poetry.dev-dependencies]
pytest = "^5.3.5"
pytest-django = "^3.8.0"
要让PyCharm自动使用poetry创建的虚拟环境,需要进入Python解释器配置诗歌创建的虚拟环境项目。虚拟环境中的口译员。
首先运行以下命令输出创建的虚拟环境的位置:
$ poetry env info --path
C:\Users\user\.virtualenvs\django_dev_env_demo-frkNfPtg
PyCharm:文件 -> 设置 -> 项目:django_dev_env_demo -> 项目解释器。
点击右上角齿轮,然后点击Add添加虚拟环境,选择Existing Environment,然后点击Interpreter后面的省略号,选择poetry env info --path
Scripts/python输出虚拟环境路径.exe作为解释器。
然后点击ok确认就可以了。
这样,在使用PyCharm的Terminal时,会自动激活poetry创建的虚拟环境,就像Pipenv创建的虚拟环境一样。
总结
这里我将向大家展示如何使用PyCharm + Uvicorn + Docker + AutoHotkey + Pipenv或Poetry搭建一个舒适的django开发环境,基本上可以满足大多数不是很复杂的项目。
记住:无论你如何设计开发环境,核心目标只有一个:让开发者只专注于开发核心业务逻辑,而不是被各种环境问题分心。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。