标准流程
- 导出当前python环境中所有的包
pip freeze > requirements.txt
如果只是导出当前项目运行所依赖的包,可以用pipreqs
安装
pip install pipreqs
使用:进入根目录,
pipreqs ./
这样会在根目录生成一个requirements.txt,里面有用到的包和版本。
- 在本地创建一个虚拟环境(不要去共享文件夹)。py3.6自带venv
创建:python3 -m venv path
进入:source path/bin/activate
- 安装需要的包:
pip install -r requirements.txt --default-timeout=1000
不能用pip3,因为会装到原环境里,要用pip
- 安装pyinstaller,同样也用pip
- 使用
激活:
source myenv/bin/activate
关闭:
deactivate
debug:打包使用多线程的代码
对于用到了多线程的Python程序需要单独注意,PyInstaller有很多线程的问题,打包后双击exe程序运行时,程序会不停的启动进程,但是并没有真正执行进程(详见https://blog.csdn.net/t1014336028/article/details/83018987)
按照网上提到的办法,在 if name == ‘main’: 下面加一行代码:multiprocessing.freeze_support(),再打包运行.exe文件,就可以跑起来了。
ref: https://www.cnblogs.com/seikito/p/10384174.html
debug:Python library not found: libpython3.6m.so, libpython3.6.so.1.0, libpython3.6m.so.1.0, libpython3.6mu.so.1.0
OSError: Python library not found: libpython3.6m.so, libpython3.6.so.1.0, libpython3.6m.so.1.0, libpython3.6mu.so.1.0
This would mean your Python installation doesn't come with proper library files.
This usually happens by missing development package, or unsuitable build parameters of Python installation.
* On Debian/Ubuntu, you would need to install Python development packages
* apt-get install python3-dev
* apt-get install python-dev
* If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
首先先看一下这些python库是不是真的不存在:
获取当前python 的bin路径:
which python
查看python库:
ldd 路径
发现 libpython3.6m.so真的没有
以防万一,搜索一下本地:
find / -name 'libpython3.6m.so.1.0'
这里有个小坑:find: ‘/run/user/1000/gvfs’: Permission denied
明明用的是root用户,为什么权限不足呢?
官方说这是一个bug——bug#615848. 原因是FUSE文件系统和权限不配的问题,全局搜索时碰到它就会退出报错。
其实这个目录是空的,查不查都没关系。所以,以下解决方式比较简直暴
umount /run/user/1000/gvfs
rm -rf /run/user/1000/gvfs
总之检查完发现真的没有这个so文件。那怎么办?
按照指示,先看一下python3-dev有没有装,发现装了;检查libpython3.6有没有装,发现也装了。然后重新进入python3.6安装路径:/home/pxy/app/Python-3.6.9,rebuild一下:
sudo ./configure --enable-shared
make
sudo make install
这样之后,发现当前路径下已经有了这个so文件
然后拷贝一下:
sudo cp libpython3.6m.so.1.0 /usr/local/lib/
修改一个文件:
sudo vi /etc/ld.so.conf
添加一行:
include /usr/local/lib
保存,退出并执行:
sudo ldconfig