遇到的问题
需要从Django 换到 Flask,因为生产环境是完全隔离的,因此需要为生产环境安装python包
- 主要问题,我如何知道Flask 环境需要哪些包
- 如何离线下载这么多包
- 如何批量离线安装
古老的方式:
1. pip freeze > requirements.txt # 生成环境
2. 手动去官网把每一个包下到文件夹中
3. 然后将文件夹上传到生产环境中
4. 手动一个一个 pip install 包
推荐方式
1. pip freeze > requirements.txt # 生成环境
2. pip wheel -r requirements.txt -w packages
3. 然后将文件夹上传到生产环境中
4. pip install -r requirements.txt --no-index --find-links=packages # 指定你的文件夹
命令说明
- freeze 将依赖关系分析出来并 使用windows 管道符号导入到该文件中
- wheel 分析requirements 文件,并将所有包及其依赖包下载为 wheel 格式,通过 w 选项导入 packages 文件夹中
- install --find-links 指定离线安装的文件夹,也就是你下载好的包
- 注意: --no-index 必须搭配 --find-links 使用
--no-index¶ Ignore package index (only looking at –find-links URLs instead).
Install local packages 官方说明
In some cases, you may want to install from local packages only, with no traffic to PyPI.
-
首先,将所有包下载到DIR这个目录中
$ pip download --destination-directory DIR -r requirements.txt
-
download 命令会查看wheel缓存,然后再去PyPI下载库,但download命令下载的包不会进入wheel缓存,如果你需要wheel 缓存,你可以先执行以下命令
- 需要注意,该命令可能会报错,因为有些包是源码包,不能被打包成wheel 格式,忽略就好了
-
$ pip wheel --wheel-dir DIR -r requirements.txt
- 需要注意,该命令可能会报错,因为有些包是源码包,不能被打包成wheel 格式,忽略就好了
-
下载后执行下面的命令就可以进行安装了
$ pip install --no-index --find-links=DIR -r requirements.txt
-
安装报错
- pip 版本错了,换成 pip3 就OK了
pip 文档说明 pip 官方文档
常见问题
-
源代码安装步骤
- 下载 uwsgi 源码包, Pypi 官网下载
- 解压
tar -zxvf uwsgi.tar.gz
- 进入目录
cd uwsgi
- 使用python 安装
python3 setup.py install
- 即可安装成功
-
注意生产环境是什么平台,如果是Linux,你需要在虚拟机中下载 wheel包,切记
- 包名中有 win ,代表只能在windows 中安装
- 没有 win,代表跨平台
-
安装时报错
Failed building wheel for alembic Running setup.py clean for alembic Running setup.py bdist_wheel for Mako ... error Complete output from command /usr/local/bin/python3.7 -u -c "import setuptools , tokenize;__file__='/tmp/pip-wheel-e6wqgb6g/Mako/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compi le(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-l_pjqx6k: usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] or: -c --help [cmd1 cmd2 ...] or: -c --help-commands or: -c cmd --help error: invalid command 'bdist_wheel' ---------------------------------------- Failed building wheel for Mako Running setup.py clean for Mako Failed to build mysql-connector uwsgi SQLAlchemy alembic Mako ERROR: Failed to build one or more wheels
- 问题原因,因为这些包的格式是 tar.gz,也就是源码包,是不可以直接转为 wheel 报的,你需要将这些包从pypi 一个一个下载,解压,进入文件夹然后用
python3 setup install
才能安装 - 参考上面源代码安装
- 问题原因,因为这些包的格式是 tar.gz,也就是源码包,是不可以直接转为 wheel 报的,你需要将这些包从pypi 一个一个下载,解压,进入文件夹然后用
-
wheel 包名 包名官方文档
wheel 包的命名格式为 {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl 。
- 例如
mysql_connector-2.1.6-cp36-cp36m-win_amd64.whl
名称 | 对应名称 | 解释 |
---|---|---|
distribution | mysql_connector | 包名 |
version | 2.1.6 | 版本 |
bulid tag | 这里没写 | |
python-tag | cp36 | 表示 cpython 3.6 版本 |
abi-tag | cp36m | abi Application Binary Interface 应用程序二进制接口 |
platform | win_amd64 | platform 还可以是 any win32 , linux_i386 , linux_x86_64, any 表示 跨平台 |
有关pip 更多讯息,查看PyPi 与 pip