存档在 ‘Python’ 分类

MAC 安装caffe问题

2017年12月8日

各种稀奇古怪的问题都碰到,今天按如下方法安装完成。
1.安装anaconda2,默认在根目录;
2.依赖包
[plain]for x in snappy leveldb gflags glog szip hdf5 lmdb homebrew/science/opencv;
do
brew uninstall $x;
brew install –fresh -vd $x;
done
brew uninstall –force protobuf; brew install –with-python –fresh -vd protobuf
brew uninstall boost boost-python; brew install –fresh -vd boost boost-python
[/plain]
3.因为我是用cmake安装很多问题,这次换用make来直接编译,直接修改Makefile.config,去掉CPU_ONLY的#号,修改python路径
4.
[plain]“cublas_v2.h: No such file or directory”[/plain]如果是无GPU,则检查CPU_ONLY的开关值。
5.[plain]Undefined symbols for architecture x86_64: for caffe build
cv::imread(cv::String const&, int)”, referenced from:
caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
caffe::WindowDataLayer::InternalThreadEntry() in window_data_layer.o
caffe::ReadImageToCVMat(std::string const&, int, int, bool) in io.o
“cv::imdecode(cv::_InputArray const&, int)”, referenced from:
caffe::DecodeDatumToCVMat(caffe::Datum const&, int, int, bool) in io.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)[/plain]
出现上述信息的原因是cv::imread是在opencv_imgcodecs中定义的,然而这篇博客中并没有加-lopencv_imgcodecs,将它在Linker Flags也加上即可,在Makefile里搜索pthread 把这个选项紧跟在后面。
6.[plian]No module named google.protobuf.internal[/plain]装的是anaconda2, 解决方法是在其中安装protobuf最新版本
[plain]conda install protobuf[/plain]
7.

No module named pydot

安装下面的包

brew install python-pydot

8.

dot” not found in path

安装下面的包
[plain]brew install graphviz[/plain]

相关归档

pyqtQQ[Linux平台下QQ][WebQQ桌面化][Linux下安装QQ]使用帮助

2013年7月14日

(腾讯公司已经修改了登陆界面,pyqtQQ暂时未更新)

引言:

该软件是基于pyQt4编写,感谢pwwang.com的pyWebQQ提供的思路,由于一些系统已经不支持gtkmozembed,在fedora下独立安装gtkmozembed会有很多依赖,另外很多人并不是使用Ubuntu,安装一些相关库比较麻烦。所以我用pyqt写了该软件,目的就是让更多的Linux系统可以使用。另外python的语法和C++比较相似,比较容易上手,也为后续维护提供了可能性。(大爱Python)

下载

tar.gz压缩包下载链接:点击这pyqtQQ-1.3.tar.gz
tar.bz2压缩包下载链接:点击这(暂无)
zip压缩包下载链接:点击这pyqtQQ-1.3

测试系统:

Fedora 17, Fedora 9, Fedora 12

功能:

桌面化Q+ Web
新消息桌面与任务栏提示
支持软件最小化到系统托盘
其他Q+Web所有功能
(点击关闭时会隐藏窗口,如果想退出QQ,在任务栏图标上点击右键->退出)
最爱的是可以使用QQ音乐听歌!

安装

第一步:安装SIP(下载地址1下载地址2)

tar xvzf sip-4.17.7.tar.gz
cd xvzf sip-4.17.7
python configure.py
make
make install

第二步:安装QT(下载地址1,下载地址2)

如果你安装过QT源码包或者QT SDK,则可以跳过该步骤。
以下两种方式任选一种(第一中安装大概在5分钟左右,第二种安装在两个小时左右,自己衡量下)
懒人安装(直接安装二进制包):

./qt-sdk-linux-x86-opensource-2010.05.1.bin

或者

/你放置的目录/qt-sdk-linux-x86-opensource-2010.05.1.bin

直到安装结束
想体验QT手动编译安装过程(安装源码包)

tar xvzf qt-everywhere-opensource-src-4.8.5.tar.gz
./configure
make
make install

第三步:安装PyQt4(下载链接1下载链接2)

python configure-ng.py --qmake /opt/qtsdk-2010.05/qt/bin/qmake
make
make install

PyQt4安装,编译过程稍稍较长。

第四步:安装pyqtQQ

python configure.py
make
make install

至此,你就可以在桌面或者开始菜单应用里找到pyqtQQ了。
Enjoying!!!

可能需要的库或软件

1.PyQt4 下载链接:http://www.riverbankcomputing.co.uk/software/pyqt/download
2.python下载链接:http://www.python.org/download/
3.pynotify下载链接:http://www.galago-project.org/downloads.php
4.Sip下载链接:http://www.riverbankcomputing.co.uk/software/sip/download/
5.Pygtk下载链接:http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/

其他

访问我的其他小软件:其他windows下小软件
没事的时候喜欢写点小东西玩玩,希望喜欢!

问题

如果在使用QQ音乐的时候不能加载,请安装flash player,Adobe Flash Player的安装比较容易,只要将对应的文档复制到正确的的位置即可,具体的操作
如下:
(1) 将libflashplayer.so拷贝到Firefox的Plugin目录:

cp libflashplayer.so /usr/lib/mozilla/plugins/

(2) 将usr目录下的所有文档拷贝到系统的/usr目录下:

cp -r ./usr/* /usr/

重新打开即可。

pynotify 写通知提醒

2013年1月14日

import pynotify

pynotify.init (“FirstAPP”)

n = pynotify.Notification (“Hello Creaeter”,’. 点此到百度‘)

n.show()

如何使用好pyqt的signal和slot

2013年1月14日

如果你是使用PyQT 4.5之後的版本,除了傳統的signal/slot的連接方式外,你還多了一種比較符合Python樣式的寫法。 這種寫法是透過下面兩種新的PyQT物件來達成
pyqtSignal
pyqtSlot
正如其名, pyqtSingal是用來定義signal,而pyqtSlot 則是用於slot。
首先,我們來了解如何利用pyqtSignal來制定一個signal。

qt的官方文档中有说明,signal只能在QObject的子类中定义。如果在子类外直接定义,会出现 AttributeError: ‘PyQt4.QtCore.pyqtSignal’ object has no attribute ’emit’

且看下面的範例:
from PyQt4 import QtCore

class MyQObject(QtCore.QObject):

# 定義一個無參數的signal

signal1 = QtCore.pyqtSignal()

# 定義一個有一個整數參數的signal,並且name為qtSignal2。

signal2 = QtCore.pyqtSignal(int, name=’qtSignal2′)

def __init__(self):
super(MyQObject, self).__init__() #如果写了__init__()函数,这一行一定要有,否则会出现TypeError: pyqtSignal must be bound to a QObject, not ‘MyQObject’

def connectSigSlot(self):

# 利用pySignal物件本身提供的connect,我們可以輕易的將pySignal物件與對應的slot相連。

# 將signal1與myReceiver1連接起來。

self.signal1.connect(self.myReceiver1)

# 將signal2與myReceiver2連接起來。

self.signal2.connect(self.myReceiver2)

def myEmitter(self):

# 利用pyqtSignal物件所提供的emit function,我們就可以輕易的發出signal。

self.signal1.emit()

self.signal2.emit(10)

def myReceiver1(self):

print ‘myReceiver1 called’

def myReceiver2(self, arg):

print ‘myReceiver2 called with argument value %d’ % arg

簡單的說,透過pyqtSignal,將signal也視為一種物件,所以signal所需的功能皆可由signal本身的method來定義。 所以整個signal的定義與使用完全符合物件導向的精神,程式看起來也更為直覺。
而pySlot則是一個Python的decorator,我們可以透過他來將一個method定義為slot。
@QtCore.pyqtSlot
()

def mySlot(self):

print ‘mySlot received a signal’)

@QtCore.pyqtSlot
(int)

def mySlot2(self, arg):

print ‘mySlot2 received a signal with argument %d’ % arg)

整個slot的定義與舊的方法相較,頓時變得簡單許多。如果,你的UI使透過pyuic4所製作出來的,那 甚至可以透過 slot的名稱來指定要連結的元件與signal。舉例來說,如果你的UI中有一個名為myBtn的按鈕,想要連接他的clicked signal。你只要在你繼承的視窗類別中,定義如下的slot:
@QtCore.pyqtSlot
(bool)

def on_myBtn_clicked(self, checked):

print ‘myBtn clicked.’

PyQT會自動將這個slot與UI內的myBtn的clicked singal連接起來。真的是非常省事。
新的singal/slot的定義與使用方式是PyQT 4.5中的一大改革。可以讓PyQT程式更清楚易讀。如果你也是用PyQT 4.5以後的版本。 建議您開始使用這種新的方式吧。

关于QWebView的信号与槽

2013年1月13日

Public Slots
· void back ()
· void forward ()
· void print ( QPrinter * printer ) const
· void reload ()
· void stop ()
· 19 public slots inherited from QWidget
· 1 public slot inherited from QObject
Signals
· void iconChanged ()
· void linkClicked ( const QUrl & url )
· void loadFinished ( bool ok )
· void loadProgress ( int progress )
· void loadStarted ()
· void selectionChanged ()
· void statusBarMessage ( const QString & text )
· void titleChanged ( const QString & title )
· void urlChanged ( const QUrl & url )
· 1 signal inherited from QWidget
· 1 signal inherited from QObject
1.loadStarted、loadFinished和loadProgress信号介绍
loadStarted信号当有新的web page请求时发出。而我们关注更多的是loadProgress信号。loadProgress信号在load web page的一个元素成功时发出。这里的元素指代image、text、script对象。loadProgress的value表明了网页load的进度,范围从0-100。我们可以看出,QWebView封装了获得load进度值的计算方法。我们可以连接信号,对进度条赋值
connect(webView, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
其中setProgress方法需要自己定义。
loadFinished信号在web page load完成后发送。

2.iconChanged、selectionChanged、titleChanged和urlChanged信号介绍
当web page显示网页的icon、selected text、title或url改变时发送

3.back、forward、reload、print、stop槽介绍
back、forward对应QWebPage的后退与前进操作,相当于webView->page()->triggerPageAction(QWebPage::Back);和
webView->page()->triggerPageAction(QWebPage::Forward);
其中QWebView通过调用page方法返回current page. QWebPage::Back和QWebPage::Forward在QWebPage::WebAction中定义

Reload与stop槽为重载与停止load web page

Print槽用于将main frame通过QPrinter paints出来。这里可以更进一步了解QWebView、QWebPage与QWebFrame三者的层次结构

4.linkClicked与statusBarMessage信号
首先,linkClicked信号能够发送的前提是对应的QWebPage::linkDelegationPolicy被设定为允许链接
而statusBarMessage信号发生在status text改变时

Python 类的定义、继承及使用对象

2013年1月13日

Python编程中类的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个类,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。类还拥有属性和功能,属性即类本身的一些特性,如人类有名字、身高和体重等属性,而具体值则会根据每个人的不同;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等功能。具体的形式如下:

# 例:类的概念
class 人类:
	名字 = '未命名' # 成员变量
    def 说话(内容): # 成员函数
        print 内容			# 成员变量赋初始值 

某人 = 人类()		# 定义一个人类对象某人
某人.名字 = "路人甲"
某人.说话	('大家好')	# 路人甲说话
>>> 大家好!			# 输出

Python中定义和使用类的形式为:class 类名[(父类名)]:[成员函数及成员变量],类名为这个类的名称,而父类名为可选,但定义父类名后,子类则拥有父类的相应属性和方法。在用类定义成对象时,会先调用__init__构造函数,以初始化对象的各属性,类的各属性(成员变量)均可以在构造函数中定义,定义时只要加上对象指针就好了。而在对象销毁时,则会调用__del__析构函数,定义类的成员函数时,必须默认一个变量(类似于C++中的this指针)代表类定义的对象本身,这个变量的名称可自行定义,下面例子将使用self变量表示类对象变量。

# 例:类定义及使用
class CAnimal:
	name = 'unname' # 成员变量 
    def __init__(self,voice='hello'):	# 重载构造函数
        self.voice = voice			# 创建成员变量并赋初始值
    def __del__(self):      		# 重载析构函数
        pass				# 空操作
    def Say(self):
        print self.voice

t = CAnimal()		# 定义动物对象t
t.Say()		# t说话
>> hello			# 输出
dog = CAnimal('wow')	# 定义动物对象dog
dog.Say()			# dog说话
>> wow			# 输出

Python编程中类可以承继父类属性,形式为class 类名(父类),子类可以继承父类的所有方法和属性,也可以重载父类的成员函数及属性,须注意的是子类成员函数若重载父类(即名字相同),则会使用子类成员函数

# 例:类的继承
class CAnimal:
    def __init__(self,voice='hello'): # voice初始化默认为hello
        self.voice = voice
    def Say(self):
        print self.voice
    def Run(self):
        pass	# 空操作语句(不做任何操作)

class CDog(CAnimal):        # 继承类CAnimal
    def SetVoice(self,voice): # 子类增加函数SetVoice
        self.voice = voice
    def Run(self,voice): # 子类重载函数Run
        print 'Running'

bobo = CDog()
bobo.SetVoice('My Name is BoBo!')      # 设置child.data为hello
bobo.Say()
bobo.Run()

>> My Name is BoBo!
>> Running