python打包成可执行文件
1
最开始我直接把在Windows上打包的run.exe文件上传到Linux以为可以直接用了。但是./run后报错。百度后知道,Windows上的程序不能在Linux上运行
Linux下文件是否可执行可后缀没有关系,只和权限有关系,靠的是文件本身的权限。想要执行就 chmod 755 filename 改变文件权限
windows和linux的二进制文件不能兼容,楼主检查下吧,不能在linux下运行windows的程序.一定要在linux下运行,需要安装wine
Linux默认支持ELF格式二进制文件,Windows的PE格式运行不了的。
2 python用pyinstaller打包后,运行程序报错"pkg_resources.DistributionNotFound"的解决办法

最后一句话是重点
pkg_resources.DistributionNotFound:the "APScheduler" distribution was not found....
这里明明已经打包好了exe文件,也没有报错。但是运行exe时候,却弹出这个界面一闪而过。
之后再查阅了pyinstaller的官方文档后,找到了解决办法。
在目标文件目录下创建一个hook-ctypes.macholib.py文件:
里面的内容如下:
# -*- coding: utf-8 -*-
from PyInstaller.utils.hooks import copy_metadata
datas = copy_metadata('apscheduler')
然后打包的时候,多加一句--additional-hooks-dir=,如下所示:
pyinstaller -F yourfile.py --additional-hooks-dir=
这样修改以后,打包出来的exe文件就能够正常使用了。
3 APScheduler: LookupError: No trigger by the name “interval” was found
环境
python: 2.6.6
PyInstaller: 2.1
APScheduler: 开始是3.0.1,后来是3.0.5
问题一
问题描述
以前在别的机器上开发的python程序(python2.7),在新的机器上运行时报错
LookupError: No trigger by the name "interval" was found
程序代码
import os, time
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler def myjob():
print('myjob: %s' % datetime.now())
time.sleep(5) if __name__ == '__main__':
scheduler = BackgroundScheduler()
scheduler.add_job(myjob, 'interval', seconds=1)
scheduler.start() try:
while True:
time.sleep(5)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
原因
是由于低版本的setuptools导致
解决办法
sudo pip install --upgrade setuptools
sudo pip install --ignore-installed apscheduler
然后再次运行上面的python代码,问题解决。
问题二
问题描述
第一个问题解决后,在运行使用pyinstaller打包生成的可执行文件的时候报错
Traceback (most recent call last):
File "<string>", line 11, in <module>
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 330, in add_job
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 782, in _create_trigger
File ".../out00-PYZ.pyz/apscheduler.schedulers.base", line 766, in _create_plugin_instance
LookupError: No trigger by the name "interval" was found
原因
感觉好像是由于pyinstaller打包的时候使用了错误版本的APScheduler。(不确定)???
解决办法
不要在add_job方法中使用“’interval’, seconds=1”做trigger,而是先创建一个IntervalTrigger对象,然后add_job的时候使用这个对象,即:
修改原来代码中
scheduler.add_job(myjob, 'interval', seconds=1)
为
trigger = IntervalTrigger(seconds=1)
scheduler.add_job(myjob, trigger)
完整代码如下
def myjob():
print('myjob: %s' % datetime.now())
time.sleep(5) if __name__ == '__main__':
scheduler = BackgroundScheduler()
trigger = IntervalTrigger(seconds=1)
scheduler.add_job(myjob, trigger)
scheduler.start() try:
while True:
time.sleep(5)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
然后用PyInstaller重新打包,此时再运行可执行文件的时候就不会报错了。
重点:因为用到了IntervalTrigger,所以需要从包里导入,然后我找了这么一个帖子http://blog.csdn.net/mx472756841/article/details/51751616
用了这里面的如下代码
# 示例代码
from apscheduler.triggers.interval import IngervalTrigger
# 使用字符串方式
scheduler.add_job(interval_tick,'interval',seconds=4,minutes=2,
start_date=datetime.now()+dt.timedelta(seconds=120),
end_date=datetime.now()+dt.timedelta(seconds=360))
# 使用IntervalTrigger指定时间运行
trigger = IntervalTrigger(seconds=60,
start_date=datetime.now()+dt.timedelta(seconds=60),
end_date=datetime.now() + dt.timedelta(seconds=120))
scheduler.add_job(date_tick, trigger)
但是他这里import是错误的。害我找了半天,后来用在在python自带的用户图形界面中import apschedluer 后用dir() 一步一步找到正确的名字,然后才运行通过的。
4 打包成可执行文件后就需要连接本地的数据库(XAMPP上的MySQL)
https://jingyan.baidu.com/article/d169e186467a44436611d8b1.html
可以进入shell后操作(如果host为%号,那么就是所有主机都可以登录,包括远程主机.)
musql -uroot
select host,password,user,from user;
update user set host = "%" where host = "127.0.0.1"
相关文档(http://blog.csdn.net/xiaomengh/article/details/48706149)
5 greenlet.h:8:20: 致命错误: Python.h:没有那个文件或目录
解决方法是安装python-dev,这是Python的头文件和静态库包:
sudo apt-get install python-dev
但还是不行,TODO
TODO
python打包成可执行文件的更多相关文章
- 将Python打包成可执行文件exe的心路历程
导言: 我们有时候需要将做好的Python程序打包成为一个exe , 方便我们使用,查找了资料发现 pyinstaller .py2exe,最后还是选择的pyinstaller,用的时候踩过了挺多的坑 ...
- 将Python脚本打包成可执行文件
Python是一个脚本语言,被解释器解释执行.它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库.(Python官方的各种安 ...
- Python打包成exe可执行文件
Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...
- python打包生成可执行文件教程
python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...
- Python打包成exe,文件太大问题解决办法
Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...
- python打包成exe
目前有三种方法可以实现python打包成exe,分别为 py2exe Pyinstaller cx_Freeze 其中没有一个是完美的 1.py2exe的话不支持egg类型的python库 2.Pyi ...
- py库:把python打包成exe文件(pyinstaller)
http://blog.csdn.net/be_quiet_endeavor/article/details/73929077 用Pyinstaller把Python3.4程序打包成可执行文件exe ...
- 关于python打包成exe的一点经验之谈
我经常用python写些脚本什么的,有时候脚本写完以后,每次运行都得在IDE打开在运行,很麻烦,所以经常将python编译成exe.SO...有了一点经验,在这和大家分享一下. python ...
- Python打包成exe,pyc
D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...
随机推荐
- hdu 2454 Degree Sequence of Graph G(可简单图化判定)
传送门 •Havel-Hakimi定理: 给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化. 进一步,若图为简单图,则称此序列可简单图 ...
- Resharper 去掉注释拼写
最近在 Resharper 的 2018.2.1 的版本,提供了单词拼写功能,如果自己写错了单词,可以在 Resharper 提示 Resharper 的拼写 在 Resharper 的 2018.2 ...
- 不同RAM空间存储变量区分
- Keras mlp 手写数字识别示例
#基于mnist数据集的手写数字识别 #构造了三层全连接层组成的多层感知机,最后一层为输出层 #基于Keras 2.1.1 Tensorflow 1.4.0 代码: import keras from ...
- WWDC2018 之 高性能 Auto Layout
1. 关于 Auto Layout 的历史渊源 上世纪 90 年代,名叫 Cassowary的布局算法,通过将布局问题抽象成线性不等式,并分解成多个位置间的约束,解决了用户界面的布局问题. Apple ...
- callback、promise和async、await的使用方法
callback 回调是一个函数被作为一个参数传递到另一个函数里,在那个函数执行完后再执行.通俗的讲就是 B函数被作为参数传递到A函数里,在A函数执行完后再执行B. promise Promise 是 ...
- jquery简单实现复选框的全选与反选
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- redis集群数据迁移txt版
./redis-trib.rb create --replicas 1 192.168.112.33:8001 192.168.112.33:8002 192.168.112.33:8003 192. ...
- [gitHub实践] git基础:远程仓库的使用
[gitHub实践] git基础:远程仓库的使用 版权2019.6.2更新 git 基础 远程仓库的使用 git remote # 查看远程仓库 $ git remote # 克隆的仓库服务器默认名字 ...
- 1071 小赌怡情 (15分)C语言
常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对了,则 ...