msgpackpython
1. python的pymol專家
摘要 PyMOL是由Warren Lyford DeLano編寫的一個分子結構顯示軟體,由於生成的圖片質量極高,受到了科研工作者的廣泛贊;由PyMOL製作的圖像屢次出現在Nature、Science等雜志的封面上,作者自己則稱所有發表的蛋白質結構圖像中,有1/4的是有PyMOL製作的。2010年,Schrödinger公司從DeLano Scientific LLC手中買下了PyMOL,繼續發行PyMOL的商業版。與此同時,PyMOL還有一個由用戶贊助的開源版本,相比商業版功能雖然少了一些,但是功能依舊強大。
2. pythoncharm有哪些奇技淫巧
1. 元類(metaclass)
PyPy的源碼里有個pair和extendabletype
"""
Two magic tricks for classes:
class X:
__metaclass__ = extendabletype
...
# in some other file...
class __extend__(X):
... # and here you can add new methods and class attributes to X
Mostly useful together with the second trick, which lets you build
methods whose 'self' is a pair of objects instead of just one:
class __extend__(pairtype(X, Y)):
attribute = 42
def method((x, y), other, arguments):
...
pair(x, y).attribute
pair(x, y).method(other, arguments)
This finds methods and class attributes based on the actual
class of both objects that go into the pair(), with the usual
rules of method/attribute overriding in (pairs of) subclasses.
For more information, see test_pairtype.
"""
class extendabletype(type):
"""A type with a syntax trick: 'class __extend__(t)' actually extends
the definition of 't' instead of creating a new subclass."""
def __new__(cls, name, bases, dict):
if name == '__extend__':
for cls in bases:
for key, value in dict.items():
if key == '__mole__':
continue
# XXX do we need to provide something more for pickling?
setattr(cls, key, value)
return None
else:
return super(extendabletype, cls).__new__(cls, name, bases, dict)
def pair(a, b):
"""Return a pair object."""
tp = pairtype(a.__class__, b.__class__)
return tp((a, b)) # tp is a subclass of tuple
pairtypecache = {}
def pairtype(cls1, cls2):
"""type(pair(a,b)) is pairtype(a.__class__, b.__class__)."""
try:
pair = pairtypecache[cls1, cls2]
except KeyError:
name = 'pairtype(%s, %s)' % (cls1.__name__, cls2.__name__)
bases1 = [pairtype(base1, cls2) for base1 in cls1.__bases__]
bases2 = [pairtype(cls1, base2) for base2 in cls2.__bases__]
bases = tuple(bases1 + bases2) or (tuple,) # 'tuple': ultimate base
pair = pairtypecache[cls1, cls2] = extendabletype(name, bases, {})
return pair
先說extendabletype。嘛 其實注釋已經說得聽明白了,就是一個C#裡面的partial class的Python實現。
然後是pair和pairtype。pairtype就是根據兩個類創建一個新的類,這個類繼承自使用這兩個類的基類構造的pairtype(有點繞……)或者tuple。
有啥用呢?可以拿來實現multimethod。
class __extend__(pairtype(int, int)):
def foo((x, y)):
print 'int-int: %s-%s' % (x, y)
class __extend__(pairtype(bool, bool)):
def bar((x, y)):
print 'bool-bool: %s-%s' % (x, y)
pair(False, True).foo() # prints 'int-int: False, True'
pair(123, True).foo() # prints 'int-int: 123, True'
pair(False, True).bar() # prints 'bool-bool: False, True'
pair(123, True).bar() # Oops, no such method
好像這個例子里元類只是個打輔助的角色,好玩的都在那個pair里……
再換一個。
class GameObjectMeta(type):
def __new__(mcls, clsname, bases, _dict):
for k, v in _dict.items():
if isinstance(v, (list, set)):
_dict[k] = tuple(v) # mutable obj not allowed
cls = type.__new__(mcls, clsname, bases, _dict)
all_gameobjects.add(cls)
for b in bases:
game_objects_hierarchy.add((b, cls))
return cls
@staticmethod
def _mp_gameobject_hierarchy():
with open('/dev/shm/gomap.dot', 'w') as f:
f.write('digraph {\nrankdir=LR;\n')
f.write('\n'.join([
'"%s" -> "%s";' % (a.__name__, b.__name__)
for a, b in game_objects_hierarchy
]))
f.write('}')
def __setattr__(cls, field, v):
type.__setattr__(cls, field, v)
if field in ('ui_meta', ):
return
log.warning('SetAttr: %s.%s = %s' % (cls.__name__, field, repr(v)))
這個是從我寫的三國殺游戲中提取的一段代碼(點我簽名上的鏈接)。大意就是把class上所有可變的容器都換成不可變的,然後記錄下繼承關系。
曾經被這個問題坑過,class上的值是全局共享的,邏輯代碼一不小心修改了class上的值,單機測試的時候是測不出來的,然後放到線上……就悲劇了……當時絞盡腦汁沒有想到是這個問題硬生生的回滾了……發現了問題之後就加上了這個東西,不允許修改class上的東西。
記錄下繼承關系是為了畫類圖。
還有就是常用的做數據注入
metadata = {}
def gen_metafunc(_for):
def metafunc(clsname, bases, _dict):
meta_for = getattr(_for, clsname)
meta_for.ui_meta = UIMetaDescriptor()
if meta_for in metadata:
raise Exception('%s ui_meta redefinition!' % meta_for)
metadata[meta_for] = _dict
return metafunc
from gamepack.thb import characters
__metaclass__ = gen_metafunc(characters.sakuya)
class Sakuya:
# 於是這個就不是類了, 而是作為數據存到了metadata這個dict里
char_name = u'十六夜咲夜'
port_image = 'thb-portrait-sakuya'
figure_image = 'thb-figure-sakuya'
miss_sound_effect = 'thb-cv-sakuya_miss'
description = (
u'|DB完全瀟灑的PAD長 十六夜咲夜 體力:4|r\n\n'
u'|G月時計|r:|B鎖定技|r,准備階段開始時,你執行一個額外的出牌階段。\n\n'
u'|G飛刀|r:你可以將一張裝備牌當【彈幕】使用或打出。按此法使用的【彈幕】無距離限制。\n\n'
u'|DB(畫師:小D@星の妄想鄉,CV:VV)|r'
)
Ruby黨不要噴,我知道你們可以做的更優雅……
2. Python沙盒逃逸
刷新三觀的Python代碼
3. PEP302 New Import Hook
最近在把剛才提到的純Python游戲向Unity引擎上移植。
玩過Unity的就會知道,Unity的游戲的資源都是打包在一起的,沒有單獨的文件,Python解釋器就不高興了……於是寫了import hook,用Unity提供的API來讀py文件。
# -*- coding: utf-8 -*-
# -- stdlib --
import imp
import sys
# -- third party --
# -- own --
from clr import UnityEngine, WarpGateController
# -- code --
class UnityResourceImporter(object):
known_builtin = (
'sys',
'imp',
'cStringIO',
'gevent_core',
'gevent_ares',
'gevent_util',
'gevent_semaphore',
'msgpack_packer',
'msgpack_unpacker',
'UnityEngine',
)
def __init__(self, bases, unity_loader):
self.bases = bases
self.last_fullname = ''
self.last_text = ''
self.last_ispkg = False
self.unity_load = unity_loader
def find_mole(self, fullname, path=None):
if fullname in sys.moles:
return self
head = fullname.split('.')[0]
if head in self.known_builtin:
return None
rst = self.do_load_mole(fullname)
if rst:
self.last_text, self.last_ispkg = rst
self.last_fullname = fullname
return self
else:
return None
def load_mole(self, fullname):
if fullname in sys.moles:
return sys.moles[fullname]
if fullname != self.last_fullname:
self.find_mole(fullname)
try:
code = self.last_text
ispkg = self.last_ispkg
mod = sys.moles.setdefault(fullname, imp.new_mole(fullname))
mod.__file__ = "<UnityResource: %s>" % fullname
mod.__loader__ = self
if ispkg:
mod.__path__ = []
mod.__package__ = fullname
else:
mod.__package__ = fullname.rpartition('.')[0]
co = compile(code, mod.__file__, 'exec')
exec(co, mod.__dict__)
return mod
except Exception as e:
UnityEngine.Debug.LogError('Error importing %s %s' % (fullname, e))
raise ImportError(e)
def do_load_mole(self, fullname):
fn = fullname.replace('.', '/')
asset = self.try_load(fn + '.py')
if asset is not None:
return asset, False
asset = self.try_load(fn + '/__init__.py')
if asset is not None:
return asset, True
def try_load(self, filename):
for b in self.bases:
asset = self.unity_load(b + filename)
if asset is not None:
return asset
return None
sys.meta_path.append(UnityResourceImporter([
'Python/THBattle/',
'Python/Site/',
'Python/Stdlib/',
], WarpGateController.GetTextAsset))
需要的extension mole都靜態編譯到解釋器里了,所以沒考慮。
4. 可以批量執行操作的list
class BatchList(list):
def __getattribute__(self, name):
try:
list_attr = list.__getattribute__(self, name)
return list_attr
except AttributeError:
pass
return list.__getattribute__(self, '__class__')(
getattr(i, name) for i in self
)
def __call__(self, *a, **k):
return list.__getattribute__(self, '__class__')(
f(*a, **k) for f in self
)
class Foo(object):
def __init__(self, v):
self.value = v
def foo(self):
print 'Foo!', self.value
foo = Foo(1)
foo.foo() # Foo! 1
foos = BatchList(Foo(i) for i in xrange(10))
foos.value # BatchList([0, 1, 2, 3, ..., 9])
foos.foo() # 你能猜到的
這個其實不算很黑魔法了,只是感覺很好用也有些危險,所以放上來。
暫時就想到這么多了,以後發現了再補。
3. msgpack-python和 msgpack-pure有什麼不同, saltstack 不裝msgpack-pure可以嗎
配置/etc/salt/minion
同yum安裝配置,master亦同
啟動服務,設置開機自起!
4. 請教python與java之間rpc通信,rabbitmq相關
JSON 簡單粗暴
msgPack格式, 支持廣泛, 類似 JSON , 但是效率更高
Thrift 全家桶, 爽爽爽
protobuf + gRpc
5. 如何執行python第三方包windows exe格式
python第三方包的windows安裝文件exe格式, 這上面有很多python第三方包的二進制安裝文件,包括32位和64位的。下載安裝就ok了!
這下面有很多python第三方包的二進制安裝文件,包括32位和64位的。下載安裝就ok了!
包括了mysqldb,ldap等。
Index by date:
fiona
scikit-image
netcdf4
mercurial
scikits.audiolab
numba
llvmpy
python-igraph
rpy2
numpy
opencv
zope.interface
sfepy
quantlib
gdal
imread
django
psychopy
cx_freeze
msgpack
regex
cellcognition
vigra
scikit-learn
pytables
h5py
blender-mathutils
htseq
bioformats
simplejson
pyzmq
mako
simpleitk
qimage2ndarray
ujson
vlfd
libsvm
liblinear
cgkit
scipy
distribute
noise
theano
pyalembic
openimageio
pyaudio
pymca
pyamg
pgmagick
lxml
steps
sqlalchemy
cffi
biopython
python-ldap
pycurl
nipy
nibabel
pygments
mahotas
py-postgresql
pyamf
planar
holopy
pyvisa
jcc
polymode
polygon
cython
pyropes
llist
shapely
vtk
pymongo
libpython
meshpy
pandas
umysql
epydoc
coverage
cheetah
pyrxp
pybluez
pythonmagick
bsdiff4
pymssql
pymol
boost.python
orange
requests
pywcs
python-sundials
pymix
pyminuit
pylzma
pyicu
assimulo
basemap
pygraphviz
pyproj
mpi4py
spyder
pytz
pyfits
mysql-python
pygame
pycparser
twisted
pil
qutip
openexr
nipype
python-snappy
visvis
docutils
pyhdf
pyqwt
kivy
scikits.umfpack
psycopg
ets
guiqwt
veusz
pyqt
pyside
dpmix
py-fcm
scikits.hydroclimpy
smc.freeimage
scipy-stack
ipython
nose
mxbase
numexpr
pyyaml
ode
virtualenv
aspell_python
tornado
pywavelets
bottleneck
networkx
statsmodels
pylibdeconv
pyhook
lmfit
slycot
ndimage
scikits.scattpy
cvxopt
pymc
pysparse
scikits.odes
matplotlib
vpython
pycuda
pyopencl
pymvpa
pythonnet
cld
mod_wsgi
nltk
python-levenshtein
rtree
pywin32
scientificpython
sympy
thrift
pyopengl-accelerate
mdp
pyopengl
gmpy
reportlab
natgrid
scikits.vectorplot
pyreadline
milk
blosc
pycogent
pip
gevent
scons
carray
python-dateutil
jinja2
markupsafe
jsonlib
pysfml
fonttools
silvercity
console
python-cjson
pycluster
cdecimal
pytst
autopy
sendkeys
ceodbc
fipy
psutil
pyephem
pycifrw
blist
line_profiler
pydbg
bitarray
pyglet
python-lzo
faulthandler
delny
pyexiv2
ilastik
twainmole
scitools
pyspharm
casuarius
pyodbc
greenlet
nitime
pylibtiff
mmtk
pycairo
pysqlite
curses
videocapture
bazaar
nlopt
trfit
libsbml
oursql
sphinx
cellprofiler
py2exe
re2
liblas
cgal-python
pymedia
ffnet
pyfftw
libxml-python
pyfltk
pymex
pymatlab
zodb3
mmlib
pygtk
pyserial
babel
scikits.ann
scikits.delaunay
numeric
pulp
nmoldyn
pymutt
iocbio
jpype
wxpython
pybox2d
dipy
mmseg
pynifti
scikits.samplerate
scikits.timeseries
vitables
quickfix
6. ubuntu怎麼查看ryu控制器ip
針對剛剛裝完Ubuntu12.04 LTS系統的ryu安裝。
官方的安裝方法:
1.sudo pip install ryu
2.git clone https://github.com/osrg/ryu.git
cd ryu; python ./setup.pyinstall
經過若干次的嘗試和重裝系統,下面是我的安裝過程:
sudo apt-get update
1.首先
sudo apt-get install git python-pip libxml2-dev libxslt1-dev python2.7-dev
2.用sudo pip install安裝msgpack-python、oslo.config、netaddr、lxml、ecdsa。
sudo pip install msgpack-python
sudo pip install oslo.config
sudo pip install netaddr
sudo pip install lxml
sudo pip install ecdsa
3.git clone https://github.com/osrg/ryu.git
4.安裝完成後,進入ryu文件夾,執行以下操作:
cd ryu
python setup.py install
5.提示安裝完成,進行測試輸入ryu-manager
6.gui界面
安裝依賴:
#pip install Flask
#pip install gevent-websocket
獲取圖形界面源碼:
在http://github.com/yamada-h/ryu/tree/gui-patch-v3-rebase下載gui-patch-v3- rebase軟體壓縮包,解壓,把裡面的ryu/gui目錄復制到安裝Ryu的源代碼目錄/ryu/ryu。打開ryu/ryu/topology修改 switches.py ,注釋掉45行-53行即可。
啟動Ryu,進入源碼目錄ryu/app,執行
# ryu-manager --verbose --observe-links ryu.topology.switchesryu.app.rest_topology ryu.app.ofctl_rest ryu.app.simple_switch
啟動GUI界面,進入ryu/ryu/gui目錄
#python controller.py
打開瀏覽器界面 http://127.0.0.1:8000,即可查看.
7. ubuntu 怎麼導入python工程
在Ubuntu虛擬機中部署了。
項目中用到了的python模板有 redis zookeeper msgpack setuptools tornado ujson
軟體安裝包如下:
eclipse-jee-luna-R-linux-gtk-x86_64.tar.gz
jdk-7u71-linux-x64.gz
zookeeper-3.4.6.tar.gz
zkpython-master.zip
msgpack-python-0.3.0.tar.gz
Python-2.7.8.tar.xz
redis-2.6.14.tar.gz
redis-py-2.6.2.zip
setuptools-3.4.3.tar.gz
tornado-4.0.tar.gz
ujson-1.30.zip
1、安裝jdk ,直接解壓到/usr/local,然後配置環境變數即可
我把環境變數放到/etc/profile中了,當然你也可以放到.bashrc中
#add java config
export JAVA_HOME=/usr/local/jdk1.7.0_71
export JRE_HOME=/usr/local/jdk1.7.0_71/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
最後保存profile文件,並命令行執行source /etc/profile 使其生效
2、eclipse 安裝解壓即可
tar -zxvf eclipse-jee-luna-R-linux-gtk-x86_64.tar.gz
直接eclipse啟動時如果發現界面沒menu,應該是由於Ubuntu和eclipse的一個沖突導致的
#slove the menu not find
export UBUNTU_MENUPROXY=0
./eclipse
3、python 安裝,Ubuntu中自帶了python2.7
4、eclipse 中安裝pydev 插件
5、python tornado 安裝
解壓tornado包 tar -xzvf tornado-4.0.tar.gz
python setup.py build
python setup.py install
其它模塊基本上都是如此安裝
在安裝zookeeper時需要注意下,應先安裝python編譯環境包,在安裝zookeeper ,最後安裝zython插件模塊
sudo apt-get install build-essential python-dev
tar -xzvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/
cd src/c
.configure
make & sudo make install
unzip zkpython-master.zip
python setup.py install
這樣python就安裝了zookeeper模塊了
最後使用eclipse啟動tornado時,zookeeper報錯
ImportError: libzookeeper_mt.so.2
查找發現這個文件在系統/usr/local/lib中是存在的,所以應該是系統沒有找到這個動態鏈接庫,將
export LD_LIBRARY_PATH=/usr/local/lib/
寫入.bashrc文件中 source 並重啟啟動eclipse tornado done
8. python 數據結構
是個字典request_dict["request"]["p"]表示request_dict中的元素request也是個字典,再獲取它下面的元素"p"
9. windows 怎麼安裝mmseg
今天弄了一上午的python-ldap,發現要麼安裝vc,要麼用其他比較麻煩的方法,都比較麻煩。幸好找到這個地址: http://www.lfd.uci.e/~gohlke/pythonlibs/ 這上面有很多python第三方包的二進制安裝文件,包括32位和64位的。下載安裝就ok了! 包括了mysqldb,ldap等。 Index by date: fiona scikit-image netcdf4 mercurial scikits.audiolab numba llvmpy python-igraph rpy2 numpy opencv zope.interface sfepy quantlib gdal imread django psychopy cx_freeze msgpack regex cellcognition vigra scikit-learn pytables h5py blender-mathutils htseq bioformats simplejson pyzmq mako simpleitk qimage2ndarray ujson vlfd libsvm liblinear cgkit scipy distribute noise theano pyalembic openimageio pyaudio pymca pyamg pgmagick lxml steps sqlalchemy cffi biopython python-ldap pycurl nipy nibab... 今天弄了一上午的python-ldap,發現要麼安裝vc,要麼用其他比較麻煩的方法,都比較麻煩。幸好找到這個地址:
http://www.lfd.uci.e/~gohlke/pythonlibs/
這上面有很多python第三方包的二進制安裝文件,包括32位和64位的。下載安裝就ok了!
包括了mysqldb,ldap等。
Index by date:
fiona
scikit-image
netcdf4
mercurial
scikits.audiolab
numba
llvmpy
python-igraph
rpy2
numpy
opencv
zope.interface
sfepy
quantlib
gdal
imread
django
psychopy
cx_freeze
msgpack
regex
cellcognition
vigra
scikit-learn
pytables
h5py
blender-mathutils
htseq
bioformats
simplejson
pyzmq
mako
simpleitk
qimage2ndarray
ujson
vlfd
libsvm
liblinear
cgkit
scipy
distribute
noise
theano
pyalembic
openimageio
pyaudio
pymca
pyamg
pgmagick
lxml
steps
sqlalchemy
cffi
biopython
python-ldap
pycurl
nipy
nibabel
pygments
mahotas
py-postgresql
pyamf
planar
holopy
pyvisa
jcc
polymode
polygon
cython
pyropes
llist
shapely
vtk
pymongo
libpython
meshpy
pandas
umysql
epydoc
coverage
cheetah
pyrxp
pybluez
pythonmagick
bsdiff4
pymssql
pymol
boost.python
orange
requests
pywcs
python-sundials
pymix
pyminuit
pylzma
pyicu
assimulo
basemap
pygraphviz
pyproj
mpi4py
spyder
pytz
pyfits
mysql-python
pygame
pycparser
twisted
pil
qutip
openexr
nipype
python-snappy
visvis
docutils
pyhdf
pyqwt
kivy
scikits.umfpack
psycopg
ets
guiqwt
veusz
pyqt
pyside
dpmix
py-fcm
scikits.hydroclimpy
smc.freeimage
scipy-stack
ipython
nose
mxbase
numexpr
pyyaml
ode
virtualenv
aspell_python
tornado
pywavelets
bottleneck
networkx
statsmodels
pylibdeconv
pyhook
lmfit
slycot
ndimage
scikits.scattpy
cvxopt
pymc
pysparse
scikits.odes
matplotlib
vpython
pycuda
pyopencl
pymvpa
pythonnet
cld
mod_wsgi
nltk
python-levenshtein
rtree
pywin32
scientificpython
sympy
thrift
pyopengl-accelerate
mdp
pyopengl
gmpy
reportlab
natgrid
scikits.vectorplot
pyreadline
milk
blosc
pycogent
pip
gevent
scons
carray
python-dateutil
jinja2
markupsafe
jsonlib
pysfml
fonttools
silvercity
console
python-cjson
pycluster
cdecimal
pytst
autopy
sendkeys
ceodbc
fipy
psutil
pyephem
pycifrw
blist
line_profiler
pydbg
bitarray
pyglet
python-lzo
faulthandler
delny
pyexiv2
ilastik
twainmole
scitools
pyspharm
casuarius
pyodbc
greenlet
nitime
pylibtiff
mmtk
pycairo
pysqlite
curses
videocapture
bazaar
nlopt
trfit
libsbml
oursql
sphinx
cellprofiler
py2exe
re2
liblas
cgal-python
pymedia
ffnet
pyfftw
libxml-python
pyfltk
pymex
pymatlab
zodb3
mmlib
pygtk
pyserial
babel
scikits.ann
scikits.delaunay
numeric
pulp
nmoldyn
pymutt
iocbio
jpype
wxpython
pybox2d
dipy
mmseg
pynifti
scikits.samplerate
scikits.timeseries
vitables
quickfix
numscons
visionegg
10. saltstack獲取伺服器CPU使用率
步驟如下:
1、查看MASTER的BASE路徑,在對應的路徑建立_moles文件夾,存放.py的模塊。
2、在/srv/salt/_moles目錄下編寫python代碼。
3、同步模塊,執行驗證。SaltStack是一個伺服器基礎架構集中化管理平台,具備配置管理、遠程執行、監控等功能,基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建。
通過部署SaltStack,我們可以在成千萬台伺服器上做到批量執行命令,根據不同業務進行配置集中化管理、分發文件、採集伺服器數據、操作系統基礎及軟體包管理等,SaltStack是運維人員提高工作效率、規范業務配置與操作的利器。