参考:
1、 pipenv 笔记
2、 python的构建工具setup.py
3、 关于python打包成exe的一点经验之谈
4、 使用pycharm将python项目打包成exe运行文件
5、 pyinstaller参数介绍以及总结
一 项目创建
- 全新的项目:
已经安装了 Pipenv 库。
创建项目的文件夹。
命令行下进入此文件夹,
pipenv install
创建虚拟环境。使用
pipenv shell
激活虚拟环境,激活后使用命令 pip install 安装的才在此项目的虚拟环境中。PyCharm 创建项目选择刚才创建的文件夹。
设置解释器为刚才创建的虚拟环境下的(会自动选择好)。
每次安装库时,用命令行在项目文件夹根目录使用
pip install XXX
。
- pull 已存在的项目:
拉取项目到本地。
PyCharm 创建项目选择刚才创建的文件夹。
如果该项目使用 Pipenv 进行包管理,直接命令行下进入此文件夹,
pipenv install
,会自动创建虚拟环境和安装 pipfile 中的库。
二 项目部署打包分发
部署的几个问题:
- 需要依赖的包
- 自己写的包
- 怎样找到依赖的包、自己写的包
1 setup.py 打包
python的构建工具setup.py
python如何将自己写的代码打包供他人使用
Python打包分发工具setuptools简介
使用 setup.py 打包,然后在代码文件夹下执行命令
python setup.py install
,然后就可以使用这个自己做的包了,如同 requests 模块一样,可以在代码中调用这个包。会安装到 python 的 site-package 目录下。setup.py 模板:
1 | from setuptools import setup, find_packages |
2 打包成不同平台可执行文件
在 PyCharm 中的默认设置安装 PyInstaller。(原理:PyInstaller 把 python 解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装 python 和你的脚本依赖的库)。
PyCharm 中打开终端,
pyinstaller -F XXXX.py
,XXXX.py 是主程序名(指明路径)。
1 | 一些参数: |
- 为了方便可以写成 python 脚本,如:
1 | # -*- coding: utf-8 -*- |
坑一:
main.py(主函数入口文件)不能和其它模块放在同一级文件夹中。否则打包不成功,需要使用--hidden-import
一个个模块列出来。懒得一个个列出来,可以将其它模块放在与 main.py 同级的文件夹下(当作包使用)。坑二:
使用 pyinstaller 打包的时候,仅打包 .py 文件,其余依赖项(如图片资源等其它文件)只需在打包完成后,拷入打包生成的根目录即可。坑三:
如果项目中使用os.system('xxx.py')
执行脚本方式调用子模块的话,打包成 exe 会没法找到子模块。使用构建工具 setup.py 构建。或是不要使用这种类似 C 语言的面向过程编程范式,而是使用面向对象编程范式。
3 通过虚拟环境打包独立应用
setup.py 打包适用于向别人提供包使用。/ 通常打包成独立的应用程序使用 pyinstaller。
现在如果我不想打包成独立的应用,也不是制作成包,而是想做成可以脱离 IDE 直接使用的应用程序怎么办呢。
首先确保项目在 IDE(使用的虚拟环境)下正常运行。将虚拟环境复制一份出来,将代项目运行需要的 py 文件和相关资源复制出来,放在同一个文件夹中。把需要的东西从项目中抠出来,毕竟 README 等东西不一定需要。
将自己的项目路径添加进环境变量
PYTHONPATH
,或其他方法。参考:自定义模块的3种导入方式、python模块以及导入出现ImportError: No module named ‘xxx’问题。
1 | # main.py 临时 |