分類
程序

matplotlib安裝使用

matplotlib是知名的繪圖庫,當我們需要製作圖表時就要使用它了。

#安裝matplotlib
pip install matplotlib
#使用matplotlib繪製一條直線並顯示
import matplotlib.pyplot as p
p.plot(range(20),range(20))
p.show()

如果matplotlib沒有顯示出圖像,而只顯示了[],很有可能是~/.matplotlib/matplotlibrc文件中的backend值設置不當,可嘗試修改為TkAgg或template。參考:matplotlib does not show my drawings although I call pyplot.show()。我用了virtualenv,matplotlibrc文件位於pythons/p3/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc。

分類
程序

python3字符串自增

週末喝恆大冰泉,發現掃二維碼中獎概率頗高,而且可以中獎金額直接用來給手機充值或提現到銀行卡,做的比較好。趁理髮無聊的時候寫了段python掃了一會兒,但是空手而歸。代碼也很簡單和用Python抓取大衆點評的用戶評論差不多,主要就是字符串自增這塊用了個遞歸:

from bs4 import BeautifulSoup import string,sys,time,random,urllib,http.cookiejar,socket #url="https://sao.so/t/dSTUVvjUhPHpz" baseDir="/storage/sdcard0/com.hipipal.qpyplus/scripts3/test/" base="_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" HDcode="dSTUVvjUhPIjL" bingoNo=0 failNo=0 def increase(s): sHead=s[0:-1] sFoot=s[-1:] sNew="" if(sFoot != "Z"): index=base.index(sFoot) sFootNew=base[index+1] sNew=sHead+sFootNew else: sHeadNew=increase(sHead) sFootNew="_" sNew=sHeadNew+sFootNew return sNew def getHTML(url): request = urllib.request.Request(url) request.add_header("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0") try: response = urllib.request.urlopen(request) except (urllib.error.HTTPError, socket.error,urllib.error.URLError) as e: print('Connection error occurred when inserting data.'+str(e)) else: if response.code != 200: print("Error code:"+response.code) else: html = response.read().decode('utf-8') return html def check(html): global bingoNo global failNo #with open(baseDir+'expired.html',encoding='utf-8') as html: soup = BeautifulSoup(html) images = soup.find_all('img') for image in images: if "errorQrCode.jpg" in image.get('src') : failNo = failNo + 1 print("fake: " + HDcode + " " + str(failNo)) break elif "冰泉君已经失身啦" in soup.get_text(): print("expired" + HDcode) break else: print("bingo" + HDcode) bingoNo = bingoNo + 4 if __name__ == '__main__': #html=getHTML(url) #with open(baseDir+'fake.html', mode='w', encoding='utf-8') as html_file: #html_file.write(html) global HDcode while(bingoNo < 2): url = "https://sao.so/t/" + HDcode html = getHTML(url) check(html) HDcode = increase(HDcode) time.sleep(random.randrange(4,7)) [/code]

其實命中的概率真的非常低,拿13位編碼來說,一共有(11+26+26)^13=2.46*10^23種組合,瓶子上說中獎概率33.3%,按300億銷售目標和5元均價算,一共有2×10^10瓶是可以中獎的。除一下就發現……不用除了吧

分類
程序

Google Geocoding API好用

之前用qpython写了个小程序记录地理位置,反向地理编码(就是根据经纬度查询实际位置)用的是SL4A的Android模块,它就是调用底层谷歌的方法查询。但是现在一谷歌不稳定,二新手机没有装谷歌框架,所以完全无法反向地理编码。今天看了下谷歌的Geocoding API,用php转发了一下获取到的json,用起来就方便多了。而且谷歌的这个服务不用繁琐的验证,不限制客户端,甚至连帐号都不用,真是良心啊!当然由于“地理编码是一项既耗时又耗资源的任务”,所以每天发送的地理位置查询请求不得超过 2,500 个,这对于少量用户足够了。代码可以到右上角github里下载。

分類
程序 网站

自动检查网页更新

需求:http://www.cnca.gov.cn/ywzl/gjgnhz/jkzl/这个网页会公布进口水产品境外生产企业注册名单,但公布日期不一定,所以想自动检查美国(2014年07月21日)这个条目是否更新了,如果更新了发邮件通知我。方法:获取网页,查看网页是否存在“美国(2014年07月21日)”若不存在则更新了。发邮件用PHPMailer的SMTP发送邮件很方便。

check.php

<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*60*10;//单位是秒,每10小时执行一次
do{
	$run = include 'config.php';
	if(!$run) die('process abort');
	
	$url = "http://www.cnca.gov.cn/ywzl/gjgnhz/jkzl/"; 
	$ch = curl_init(); 
	curl_setopt ($ch, CURLOPT_URL, $url); 
	curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
	curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,20); 
	$content = curl_exec($ch); 
	curl_close($ch); 
	$hasAutime=strpos($content,'美国(2014年07月21日'); 
	$hasAu=strpos($content,'美国');//防止没有下载到网页误触发,方法不可取
	
	 if (!$hasAutime && $hasAu){
	  require 'mail/mySendMail.php';
	  
	  $subject="内容有更新";
	  $body="内容有更新,请访问<a href='http://www.cnca.gov.cn/ywzl/gjgnhz/jkzl/'>http://www.cnca.gov.cn/ywzl/gjgnhz/jkzl/</a>";
	  if(mySendMail("[email protected]","name",$subject,$body)){
				 echo "有更新,已发送邮件提醒";
		 } else {
				 echo "有更新,邮件发送失败";
		 }
		 die('process abort');
	 } else {
		 echo "not modified";
	 }
	
	sleep($interval);
}while(true);
?>
分類
程序

qpython3

qpython3是一个能在安卓手机上执行python3脚本的软件,很好用。通过SL4A(qpython3已内置),可以方便的编写出实用的安卓脚本程序。

https://github.com/pggdt/loc/tree/master/qpython3-cn这个是我用python3写的一个获取并保存地理位置的小程序。用到的有SL4A中location部分,webview部分,python3中的urllib等,最后用了下bootstrap美化。

分類
Linux

pip3为python3安装模块

Ubuntu 14.04对硬件的要求还是稍高,笔记本有些力不足。Ubuntu 12.04默认是python2,用pip安装模块后也是为python2安装的。想要在Ubuntu 12.04给python3安装需要先安装pip3:

sudo apt-get install python3-setuptools
sudo easy_install3 pip

然后就可以使用pip3为python3安装模块了,如:

pip3 install lxml
pip3 install lxml==4.5.0
pip3 install lxml>=4.5.0
#重新安裝指定版本
pip3 install lxml==4.5.0 --force-reinstall
#製作與使用requirements文件
pip freeze > requirements.txt
pip install -r requirements.txt

剛剛安裝numpy,網速令人抓狂,掛上代理就好多了(沒有合適代理可用下面方法指定國內軟件源):

pip3 install --proxy http://127.0.0.1:8123 numpy

使用重裝大法解決 pip 出現各種疑難

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py --force-reinstall
ln -s 目標文件 鏈接文件
ln -s /usr/local/bin/python3.5 /usr/bin/python3

ImportError: No module named _internal.cli.main 可以嘗試把 pip 文件的 from pip._internal import main 修改為 from pip import main

Centos 或 Fedora 安裝python3

其實centos安裝python3就和安裝其他軟件一樣,從官網下載,然後解壓,三扳斧搞定。那我為什麼要記下來呢,只是感嘆下,這麼厲害的軟件居然這麼好裝,哈哈哈!

#for sqlite3
yum install sqlite-devel
#for virtualenv
yum install zlib-devel
#其他依賴
yum install libffi-devel openssl-devel xz-devel bzip2-devel
#然后
wget https://www.python.org/ftp/python/3.9.11/Python-3.9.11.tar.xz
tar xf Python-3.9.11.tar.xz
./configure --prefix="/usr/local" --enable-optimizations --enable-loadable-sqlite-extensions
make
sudo make install

##如果上面編譯的時候加了指定的參數,就不用看下面這幾行了
# centos7 安裝 python3.7的時候要安裝
yum install libffi-devel openssl-devel
# configure 也要加上 --with-ssl
./configure  --with-ssl
#解決的是 No module named '_ctypes'
#和 No module named '_ssl'

python3沒有_tkinter

如果安裝python3時沒有裝tkinter,那麼很可能會遇到這個錯誤:ImportError: No module named _tkinter,我在使用pandas導出圖表時就遇到了。CentOS下經過嘗試,先安裝下面兩個軟件,然後再次執行上面的三扳斧,就有_tkinter模塊啦。

yum install tkinter
yum install tk-devel

Ubuntu下我的python3.5是系統自帶的,所以直接安裝下面的軟件即可。

sudo apt-get install python3-tk
sudo apt-get install tk-dev

Fedora自帶python3,但是也沒有自帶_tkinter,這時只要安裝dnf install python3-tkinter就可以了。

使用 Python 自帶的 venv 模塊建立虛擬環境

自帶的 venv 模塊可以直接使用,可以搭配 pip freeze > requirements.txtpip install -r requirements.txt 來遷移環境。

#在當前目錄建立虛擬環境
python3.11 -m venv my_venv
啟用虛擬環境
source my_venv/bin/activate
#直接使用 pip 安裝需要的依賴即可
#推出虛擬環境
deactivate
#刪除虛擬環境
rm -rf my_venv
#以虛擬環境運行 Python 項目
my_venv/bin/python YOUR_SCRIPT.py

使用 pipenv 建立虛擬環境

#如果主環境沒有 pipenv,則需先安裝
pip install pipenv
#建立一個 Python 3.11 的虛擬環境
pipenv --python 3.11
#如果系統沒有 Python 3.11 則需要你先安裝或編譯,我推薦安裝系統編譯好的
sudo dnf install python3.11 python3.11-devel

#安裝依賴
pipenv install <package_name>

#刪除依賴
pipenv uninstall <package_name>

#檢查安全漏洞
pipenv check

#啟用虛擬環境
pipenv shell

#退出虛擬環境
exit

#在當前文件夾運行 Python 項目
pipenv run YOUR_SCRIPT.py

#查看虛擬環境的具體位置
pipenv --py
#/home/42/.local/share/virtualenvs/scripts-t2tF_lNI/bin/python
#使用虛擬環境運行 Python 項目
/home/42/.local/share/virtualenvs/scripts-t2tF_lNI/bin/python /home/42/workspace/scripts/YOUR_SCRIPT.py

#刪除虛擬環境
pipenv --rm

#恢復虛擬環境。進入 Pipfile 和 Pipfile.lock 所在目錄
pipenv install

使用virtualenv才是解決多python版本的好方法(過時)

多版本的Python及virtualenv的安裝請參考:在CentOS 6.4上设置Python 2.7.6和3.3.3环境,我這裡簡單記下virtualenv的使用。使用virtualenv不必使用高權限。

#centos安裝pip和virtualenv
#Step1
##For RHEL 7.x and CentOS 7.x (x86_64)
yum install epel-release
#Step2
yum install -y python-pip
#Step3
pip install virtualenv
#Fedora裝virtualenv
dnf install python3-pip
dnf install python3-virtualenv
#在當前目錄新建一個python環境
cd pythons
#查看python所在目錄
whereis python
#生成python2.7的環境
virtualenv --python=/usr/local/bin/python2.7 p27
#或生成python3.5的環境
virtualenv --python=/usr/local/bin/python3.5 p35
#如果報ImportError: No module named zlib,centos下可安裝zlib-devel
#然後重新對python執行make和make install
cd p27
#啟用python2.7的環境
source bin/activate
#退出當前環境
deactivate

pip使用國內軟件源

有時網絡環境惡劣,pip裝組建時經常遇到中斷,可以通過下面命令使用國內的軟件源進行安裝。

#豆瓣
pip install numpy -i https://pypi.douban.com/simple/
#阿里雲
pip install virtualenv --trusted-host mirrors.aliyun.com -i http://mirrors.aliyun.com/pypi/simple

如果想永久修改pip的軟件源,可以修改~/.pip/pip.conf(centos下root用戶為/root/.pip/pip.conf)內容如:

[global]
trusted-host =  mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple

fedora安裝psutil出現No such file

可能是沒有安裝dev和redhat-rpm-config

#python2
dnf install python-devel
#python3
dnf install python3-devel
#redhat-rpm-config
dnf install redhat-rpm-config

本文更新於 2024/03/01。