- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!! PYTHON3 の tips
OpenSUSE leap 15 で user で Python をセルフビルドした時のメモ
(pyenv で tkinet が動かない事が始まり)
! python3.9.7
3.6 のときと同じですが。。メモ
## zypper install zlib-devel tk-devel libopenssl-devel libexpat-devel libffi-devel readline-devel openssl-devel
## sudo zypper install lzma lzma-devel xz-devel
## wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz
wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz
## wget -e HTTPS_PROXY=http://192.168.1.10:8080 https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz
tar xvfJ Python-3.9.7.tar.xz
cd ./Python-3.9.7
## ##PROXY
## ## export http_proxy=http://192.168.1.10:8080
## ## export https_proxy=http://192.168.1.10:8080
## ./configure --enable-optimizations --prefix=$HOME/opt/python3
./configure --prefix=$HOME/opt/python3 \
--enable-shared \
--with-system-expat \
--with-system-ffi \
--with-ensurepip=yes \
--enable-optimizations
make
## make install
make altinstall
## LD_LIB の設定がまずいのかな??
Python cannot find the readline module, until you symlink $prefix/lib/python3.6/lib-dynload to $prefix/lib64/python3.6/lib-dynload.
このトラブルがあるので
cd $PYTHONHOME
ln -s .$PYTHONHOME/lib64/python3.9/lib-dynload/ .$PYTHONHOME/lib/python3.9/lib-dynload/
をやっておく
#
# PIP などのアップデート
$ pip3.9 install --upgrade pip setuptools wheel cpython
#
PY-venv で使う
! setenv_python39
$ more setenv_python39
## export https_proxy=http://127.0.0.1:18080
## export http_proxy=http://127.0.0.1:18080
## export HTTPS_PROXY=http://127.0.0.1:18080
## export HTTP_PROXY=http://127.0.0.1:18080
MYOPTD=$HOME/opt
PROJ4D=$MYOPTD/proj4
PYTHONHOME=$MYOPTD/python3
export PYTHONHOME
PYTHONPATH=$PYTHONHOME:$PYTHONPATH
PYTHONPATH=$PYTHONHOME/lib64:$PYTHONHOME/lib64/python3.9:$PYTHONPATH
PYTHONPATH=$PYTHONHOME/lib:$PYTHONHOME/lib/python3.9:$PYTHONPATH
export PYTHONPATH
LD_LIBRARY_PATH=$PYTHONHOME/lib:$PYTHONHOME/lib64:$PROJ4D/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=$PYTHONHOME/bin:$PROJ4D/bin:$PATH
export PATH
export PKG_CONFIG_PATH=$HOME/opt/python3/lib64/pkgconfig:$PROJ4D/lib64
----
# python3.6.3 のインストール
## install zlib-devel openssl-devel tk-devel libopenssl-devel
## zypper install zlib-devel tk-devel libopenssl-devel libexpat-devel libffi-devel readline-devel #oenssl-devel
wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tar.xz
tar xvfJ Python-3.6.3.tar.xz
cd Python-3.6.3
## ./configure --enable-optimizations --prefix=$HOME/opt
./configure --prefix=$HOME/opt/python3 \
--enable-shared \
--with-system-expat \
--with-system-ffi \
--with-ensurepip=yes &&
make
make install
make altinstall
https://bugs.python.org/issue15631
When installing Python 3.6.3 from source on openSUSE Leap 42.2, this bug still occurs.
Python cannot find the readline module, until you symlink $prefix/lib/python3.6/lib-dynload to $prefix/lib64/python3.6/lib-dynload.
ln -s ./lib64/python3.6/lib-dynload/ ./lib/python3.6/lib-dynload/
----
! PYENV で PY-pyenv
# Python 3.6.5のインストール
pyenv install --list
pyenv install 3.6.5
# デフォルトを3.6.5にする
pyenv global 3.6.5
python --version
# pipのアップデート
pip3 install --upgrade pip
# Pythonの仮想スクリーンモジュール追加(これがあるとXvfbをいちいち起動状態にしなくていい)
pip install pyvirtualdisplay
# ブラウザ操作のためにSelenium
pip install selenium
# pyautoguiを入れるための依存ライブラリXlibを追加しておく
pip install Xlib
#PyAutoGUIはDisplayがないとインストールがこけるので、一時的にXvfbで作ってやる
#ディスプレイが繋いである場合はstartxしてXを起こしてからpip install pyautoguiすれ ばいい
touch ~/nohup.out
export DISPLAY=:1.0
/usr/bin/nohup /usr/bin/Xvfb :1 -screen 0 1920x1080x24 &
# マウスとキーボードの操作をするのでpyautoguiを入れる
pip install pyautogui
pyvirtualdisplay : ヘッドレスモードで実行的ないアプリを走らせるモジュール(Mac/Linux用)
sikuli : 高機能自動化フレームワーク
openpyxl : MS-Excel(2007以降)の読み書き
## win32api : WindowsのDLLを呼べる(Windows用)
## win32gui : Windowsのウインドウを操作できる(Windows用)
## win32cui : Windowsのコマンドラインの操作ができる(Windows用)
requests : WEBにPost/Getを投げる
lxml : html/xmlのパーサ
json : json/jsonlのパーサ
selenium : ブラウザを制御するテスト用モジュール(各種ブラウザのドライバが必要)
pyautogui : マウス操作、キーボード操作、画像マッチング
# xml/html
pip3 install lxml
# json
pip3 install simplejson
# xlsx
pip3 install openpyxl
# tsv
pip3 install tsv
----
! PYJSON
pip3 install PyJSONViewer
! Pythone の setenv_pyhon36
MYOPTD=$HOME/opt
PROJ4D=$MYOPTD/proj4
PYTHONHOME=$MYOPTD/python3
export PYTHONHOME
PYTHONPATH=$PYTHONHOME:$PYTHONPATH
PYTHONPATH=$PYTHONHOME/lib:$PYTHONHOME/lib/python3.6:$PYTHONPATH
PYTHONPATH=$PYTHONHOME/lib64:$PYTHONHOME/lib64/python3.6:$PYTHONPATH
export PYTHONPATH
LD_LIBRARY_PATH=$PYTHONHOME/lib64:$PYTHONHOME/lib:$PROJ4D/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
PATH=$PYTHONHOME/bin:$PROJ4D/bin:$PATH
export PATH
export PKG_CONFIG_PATH=$HOME/opt/python3/lib64/pkgconfig:$PROJ4D/lib64
!Python apli のディストリビューション
https://docs.python.jp/3/distutils/builtdist.html
!Python のモジュールを(画像処理関連)
[[画層処理で遊ぶために|tips-PYTHON-graphics]]
! PRINT で改行しない
print ("foo bar", end="")
print ("foo bar", end="\n") ## 行頭にカーソルが移動
!仮想環境を作る(必要なら)
virtualenv を使う場合:
pip install virtualenv
virtualenv <DIR>
source <DIR>/bin/activate
venv を使う場合:
python3 -m venv <DIR>
source <DIR>/bin/activate
----
!GUI
*https://github.com/kujirahand/tkeasygui-python
python -m pip install tkeasygui
----
! EML ファイルの表示
#!/usr/env python3
# coding:utf-8
"""
emlファイルを元に扱いやすい様にデータを取得する
サンプル。
あくまでい最低限の実装のため考慮漏れなどがあるかも。。。
"""
import sys
import email
from email.header import decode_header
class MailParser(object):
"""
メールファイルのパスを受け取り、それを解析するクラス
"""
def __init__(self, mail_file_path):
self.mail_file_path = mail_file_path
# emlファイルからemail.message.Messageインスタンスの取得
with open(mail_file_path, 'rb') as email_file:
self.email_message = email.message_from_bytes(email_file.read())
self.subject = None
self.to_address = None
self.cc_address = None
self.from_address = None
self.body = ""
# 添付ファイル関連の情報
# {name: file_name, data: data}
self.attach_file_list = []
# emlの解釈
self._parse()
def get_attr_data(self):
"""
メールデータの取得
"""
result = """\
Subject: {}
FROM: {}
TO: {}
CC: {}
-----------------------
BODY:
{}
-----------------------
ATTACH_FILE_NAME:
{}
""".format(
self.subject,
self.from_address,
self.to_address,
self.cc_address,
self.body,
",".join([ x["name"] for x in self.attach_file_list])
)
return result
def _parse(self):
"""
メールファイルの解析
__init__内で呼び出している
"""
self.subject = self._get_decoded_header("Subject")
self.to_address = self._get_decoded_header("To")
self.cc_address = self._get_decoded_header("Cc")
self.from_address = self._get_decoded_header("From")
# メッセージ本文部分の処理
for part in self.email_message.walk():
# ContentTypeがmultipartの場合は実際のコンテンツはさらに
# 中のpartにあるので読み飛ばす
if part.get_content_maintype() == 'multipart':
continue
# ファイル名の取得
attach_fname = part.get_filename()
# ファイル名がない場合は本文のはず
if not attach_fname:
charset = str(part.get_content_charset())
if charset:
self.body += part.get_payload(decode=True).decode(charset,errors="replace")
else:
self.body += part.get_payload(decode=True)
else:
# ファイル名があるならそれは添付ファイルなので
# データを取得する
self.attach_file_list.append({
"name": attach_fname,
"data": part.get_payload(decode=True)
})
def _get_decoded_header(self, key_name):
"""
ヘッダーオブジェクトからデコード済の結果を取得する
"""
ret = ""
# 該当項目がないkeyは空文字を戻す
raw_obj = self.email_message.get(key_name)
if raw_obj is None:
return ""
# デコードした結果をunicodeにする
for fragment, encoding in decode_header(raw_obj):
if not hasattr(fragment, "decode"):
ret += fragment
continue
# encodeがなければとりあえずUTF-8でデコードする
if encoding:
ret += fragment.decode(encoding)
else:
ret += fragment.decode("UTF-8")
return ret
if __name__ == "__main__":
## result = MailParser(sys.argv[1]).get_attr_data()
result = MailParser("sample.eml").get_attr_data()
print(result)
! URL ENCODE
#/bin/env python3
import urllib
from urllib.parse import urlparse
# parsed = urllib.parse.urldecode("http://example.com/example.html?foo=bar&hoge=fuga")
parsed = urllib.parse.urlparse("http://example.com/example.html?foo=bar&hoge=fuga")
print ( parsed.scheme )
print ( parsed.hostname )
print ( parsed.path )
print ( parsed.query )
query = urllib.parse.parse_qs(parsed.query)
print ( query )
tag_value = urllib.parse.unquote('%be%f0%ca%f3%c0%af%ba%f6%b2%dd')
print ( tag_value )
! py-serial
書き出し
ser.write(b'pp'+str(pan_pos).encode()+b'\n')
! gattlib のインストール
https://pypi.org/project/gattlib/
で
gattlib-0.20150805.tgz
のインストールで setup.py の
boost_libs = ["boost_python-py34"]
を
boost_libs = ["boost_python-py3"]
に修正
pip3 install gattlib
pip3 install bluepy
のとき