pyinstaller打包python应用程序
py2exe已经好久不更新了,pyinstaller则是打包python程序更强大的工具。支持多平台打包,包括Linux,Mac,Solaris,AIX和Windows,而且使用十分简单。
虽然pyinstaller说是实验性的支持python 3,其实已经支持的很好了。
安装
linux平台
pyinstaller开发版已经支持python 3,使用pip3安装支持python 3的开发版pyinstaller
1 | $ sudo pip3 install https://github.com/pyinstaller/pyinstaller/archive/python3.zip |
windows平台
windows 平台需要根据目标python 版本先安装相应的pywin32
然后下载https://github.com/pyinstaller/pyinstaller/archive/python3.zip,解压缩后,命令行进入该目录执行:
1 | cmd> python setup.py install |
打包python程序
pyinstaller尚不支持跨平台打包应用程序。
打包应用程序十分简单:
1 | $ pyinstaller -F -w your_application_entry.py |
在当前目录生成一个新目录dist,生成的可执行文件就在该目录之下。
-F,–onefile 参数指定生成一个可执行文件。
-w, –windowed, –noconsole 参数指示不生成控制台窗口,主要针对Mac和Windows平台。
如果能在当前PATH中找到UPX,会使用UPX来压缩exe文件。
其他参数详见官方文档(参考[1])
References:
[1]PyInstaller Manual
===
[erq]
Untitled Post - 119
linux的cron守护程序, 其名字来源于希腊语的chronos,意思为时间。另一说为Command Run ON。
Untitled Post - 118
datatables columns count/sum,获取datatables组件的列数:table.columns()[0].length
Untitled Post - 117
UTS namespaces (CLONE_NEWUTS, Linux 2.6.19) isolate two system identifiers—nodename and domainname—returned by the uname() system call; the names are set using the sethostname() and setdomainname() system calls. In the context of containers, the UTS namespaces feature allows each container to have its own hostname and NIS domain name. This can be useful for initialization and configuration scripts that tailor their actions based on these names. The term “UTS” derives from the name of the structure passed to the uname() system call: struct utsname. The name of that structure in turn derives from “UNIX Time-sharing System”.
Untitled Post - 116
在cassandra集群上执行nodeltool status命令时,所有节点的Owns列都为问号?,并且最后有输出”Note: Non-system keyspaces don’t have the same replication settings, effective ownership information is meaningless”,这不是错误,是因为没有指定keyspace之故。
Untitled Post - 115
Cassandra集群中的所有节点都要使用相同的种子节点(seed nodes)。种子节点不是单点故障,只是用于当新节点加入集群时启动gossip。种子节点自身不会bootstrap,而其他节点启动时会向种子节点获取信息来bootstrap。对于多数据中心集群,每一个数据中心至少要有一个种子节点,为了容错,每个数据中心可以有多个种子节点,但不推荐将所有的节点都当作种子节点,因为这会降低gossip性能,大约每个数据中心三个种子节点就可以了。
普通用户的crontab
除了root用户外,普通用户可以添加自己的定时服务。/usr/bin/crontab程序设置了组ID,因此普通用户运行crontab时是以crontab组权限运行的。
编辑用户cron配置
1 | $ crontab -e |
列出用户cron配置
1 | $ crontab -l |
更详细的用法见man crontab。
用户crontab文件位置
不同的操作系统,用户的crontab文件位置可能会不同:
1 | Debian / Ubuntu Linux - /var/spool/cron/crontabs/ |
===
[erq]
Debian配置时间同步服务器和客户端
服务器
安装
1 | # apt-get install ntp |
时间服务器的同步信息
1 | # ntpq -p |
时间服务器溯源
1 | # ntptrace -n |
客户端
安装
1 | # apt-get install ntpdate |
手动同步
1 | # ntpdate your_time_server_ip |
参数-d打开debug模式,会输出与时间服务器的交互信息。如果服务器确实运行了,但客户端无法同步时间,且有类似输出:
1 | # ntpdate -d 192.168.1.1 |
多半是因为防火墙阻止了时间服务器的UDP端口123。
自动同步
1 | # crontab -e |
在打开的用户crontab文件最后输入:
1 | # m h dom mon dow command |
这样一个小时会自动进行一次时间同步。
cron的运行日志见/var/log/syslog。
===
[erq]
Untitled Post - 114
Cassandra集群对时间要求很严格,集群中所有节点必须时间严格同步,不然可能会出现各种奇怪的问题。因此最好架设ntp服务来保证各节点时间同步。