环境搭建¶
Python,于1991年发行了第一个正式版本,比Java还要早5年,目前在编程语言排行榜中已经稳居前三。由荷兰人吉多·范罗苏姆 (Guido van Rossum)所创建。
安装¶
- Windows:直接去官网下载安装最新稳定版即可
- Mac
自带了V2.7版本,路径:/usr/bin/python
,建议不要随便卸载。
不推荐官网下载,卸载起来比较麻烦
建议使用brew install python
安装,安装路径:/usr/local/cellar/python
),升级与卸载都很方便。
- Ubuntu 16.10+
sudo apt-get update
sudo apt-get install python3.8
- CentOS 7+
# 官方源没有,得用epel源
sudo yum install epel-release
# 不一定包含最新版Python
yum search python
# 安装3.7,不包含pip
sudo yum install python37
# 安装setuptools,与Python版本保持一致
yum install python37-setuptools
# 安装pip
easy_install pip
- Docker
sudo docker run -dit --name demo python:3.9 "/bin/bash"
sudo docker exec -it demo "/bin/bash"
FROM python:3.9
# ENV PYTHONUNBUFFERED=1
'''
不缓冲stdin、stdout和stderr,默认是缓冲的
相当于设置 python 命令行的 -u 选项
'''
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
# CMD ["python", "manage.py", "runserver"]
环境¶
交互式命令行¶
- Python Shell
- IPython
Python Shell 是自带命令行工具,常用于验证一些代码片段,而 IPython 是基于 Python Shell 的第三方开源交互命令行,更强大,它其实是Jupyter的内核。
pip install ipython
IDE¶
- IDLE
IDLE是自带的简易集成开发和学习环境
快捷键:Alt+P
上一句代码,Alt+N
下一句代码
- PyCharm
PyCharm是捷克公司JetBrains为Python语言所生产的商业IDE,社区版免费
具体使用方法可参考:PyCharm 中文指南
PyCharm默认会在创建项目时新建一个虚拟环境,默认名称venv
- VSCode
VSCode并不算IDE,只是一个编辑器,个人比较喜欢用这个开发Python,而不是更智能的PyCharm,因为我觉得它过于傻瓜化,用习惯后会影响我的开发能力。
包管理工具有以下几种选择¶
多版本依赖包管理用自带的venv足矣,多版本Python管理用pyenv(不支持win)
- pip + venv
- pip + virtualenv + virtualenvwrapper
- pipenv
- conda
pip¶
官方文档:https://pip.pypa.io/en/stable/cli/
# 查看所有命令参数
pip
# 查看已安装的包
pip list
# 查看过期的包
pip list -o
# 查看某个库的具体信息(版本号、依赖、位置等)
pip show xxx
# 查询更加具体的信息
pip show -f xxx
# 搜索包
pip search xxx
# 下载包
pip download xxx
# 安装,默认安装最新版本
pip install xxx
# 指定版本
pip install xxx==version
# 指定镜像源
pip install xxx -i 镜像源 --trusted-host 镜像地址对应的host
# 更新包,也可以更新pip自己
pip install -U xxx
# 卸载包
pip uninstall xxx
# 卸载pip本身
pip -m pip uninstall pip
# 查看已安装的包
pip freeze
# 将环境中所有已安装的库及其版本导出到指定文件
pip freeze > requirements.txt
# 安装指定文件中列出的所有库
pip install -r requirements.txt
# 卸载指定文件中列出的所有库
pip uninstall -r requirements.txt
设置镜像(阿里云):~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
venv¶
# 在当前目录创建一个名为env(可自定义)的虚拟环境,删除它即删除了虚拟环境
python3 -m venv env
# 激活虚拟环境,激活后命令提示符前会显示:(env)
source env/bin/activate # Mac/Linux
env\Scripts\activate # Windows
# 安装项目依赖
pip install -r requirements.txt
# 退出虚拟环境
deactivate
用来用去还是更喜欢Python自带的Pip+Venv,以下工具仅仅是以前使用过的记录,不推荐
pipenv¶
由requests库的作者Kenneth Reitz基于pip和virtualenv所编写
- Windows:
pip install pipenv
- Mac:
brew install pipenv
命令格式:pipenv [options] command [args]
初始化项目¶
如果是新项目,可以先用pipenv --python 3
初始化(可指定具体版本)一个虚拟环境,查看当前环境所在路径:pipenv --venv
,一般默认路径为:
- Windows:
~\.virtualenvs\
- Mac:
~/.local/share/virtualenvs/
删除虚拟环境:
pipenv --rm
项目路径下会生成一个TOML格式的Pipfile文件,内容如下:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.7"
其中url字段为官方下载源,比较慢,建议替换为国内镜像源,比如:https://mirrors.aliyun.com/pypi/simple/
。
安装项目依赖¶
packages
和dev-packages
节点下列出了生产和开发环境所需的依赖,可以使用pipenv install [--dev]
一键安装
tips:如果没有初始化项目(或者说没有Pipfile文件),直接执行`pipenv install [--two/three]会自动初始化并生成Pipfile。
pipenv install -r requirements.txt # 从requirements.txt中安装
pipenv install xxx # 安装
pipenv uninstall xxx # 卸载
pipenv venv # 查看当前环境路径
pipenv graph # 查看依赖关系及信息
pipenv update # 更新所有依赖
安装完依赖后会自动生成一个JSON格式的Pipfile.lock
文件,保存着所有依赖的版本和hash信息(默认使用sha256算法给每一个包进行hash,可以保证在不安全的网络环境下也能下载到正确的包),每次更新或卸载依赖包都会更新此文件,即lock,类似于当前环境的一个快照,不要手动修改其内容。也可以手动lock:pipenv lock
。
- 生成依赖列表(为了迁移回venv):
pipenv lock -r
运行项目¶
pipenv run python xxx.py
如果python命令比较长,可以在Pipfile中添加[scripts]
节点,然后创建一个别名,比如:
alias = "python3 manage.py runserver 0.0.0.0:8000"
然后执行pipenv run alias
即可
当然还可以pipenv shell
进入到虚拟环境中执行,退出:exit
virtualenv + virtualenvwrapper¶
pip install virtualenv
除非还使用Python2.x版本,否则使用自带的venv即可
virtualenv xxx # 创建
rm -rf xxx # 删除,或者手动删除对应文件夹
activate.bat # 进入
deactivate.bat # 退出
为了便于对虚拟环境集中管理,可搭配虚拟环境管理器virtualenvwrapper使用
pip install virtualenvwrapper-win
mkvirtualenv xxx # 创建
rmvirtualenv xxx # 删除
workon # 查看
workon xxx # 进入
deactivate.bat # 退出
Conda¶
Python常被用于数据的处理,需要基于大量的第三方库,一个个手动安装这些库很麻烦,可以下载已经集成了这些库的发行版Python,比如Anaconda
Anaconda有:社区版(Anaconda Distribution)、企业版(Anaconda Enterprise)、最小发行版(Miniconda)
Anaconda社区版包含
- Anaconda Navigator 图形界面
- Anaconda Cloud 包管理服务
- Conda 包以及虚拟环境管理工具,还可以管理Python版本,可单独使用
虽然Conda来自Python社区且由Python语言开发,但它不止可以管理Python语言及Python的包,还可以管理其他语言的包(Java,R,Ruby,JS,Lua,Scala,C/C++,Fortran)
conda info
conda help
conda env list
conda info --envs # 查看
conda create -n xxx python=3 # 创建
conda remove -n xxx --all # 删除
activate xxx # 进入
deactivate xxx # 退出
conda install xxx
conda update xxx
conda remove xxx
Python之禅¶
- 简单:类似自然语言
- 明确:做任何事情应有且最好只有一个方法,少即是多。
- 优雅:准确的来说应该是实用
>>> import this
The Zen of Python, by Tim Peters
# Python 之禅,作者:Tim Peters
Beautiful is better than ugly.
# 优雅胜于丑陋
Explicit is better than implicit.
# 明确胜于晦涩
Simple is better than complex.
# 简洁胜于复杂
Complex is better than complicated.
# 复杂胜于凌乱
Flat is better than nested.
# 扁平胜于嵌套
Sparse is better than dense.
# 间隔胜于紧凑
Readability counts.
# 可读性很重要
Special cases are not special enough to break the rules.
Although practicality beats purity.
# 即便假借特例的实用性之名,也不可违背这些规则
Errors should never pass silently.
Unless explicitly silenced.
# 不要包容所有错误,除非你确定需要这样做
In the face of ambiguity, refuse the temptation to guess.
# 当存在多种可能,不要尝试去猜测
There should be one-- and preferably only one --obvious way to do it.
# 而是尽量找一种,最好是唯一一种明显的解决方案
Although that way may not be obvious at first unless you are Dutch.
# 虽然这并不容易,因为你不是荷兰人(即 Guido)
Now is better than never.
Although never is often better than *right* now.
# 做也许好过不做,但不假思索就动手还不如不做
If the implementation is hard to explain, it^s a bad idea.
If the implementation is easy to explain, it may be a good idea.
# 如果你无法向人描述你的方案,那肯定不是一个好方案,反之亦然
Namespaces are one honking great idea -- lets do more of those!
# 命名空间是一种绝妙的理念,我们应当多加利用