python之pysvn的那些坑

2021-10-04 20:27:32 字數 4062 閱讀 1959

使用詳見官方文件,後面記錄幾個用到的方法

環境:centos7,python3.7,pysvn1.8.0

centos下yum安裝預設安裝python2環境的

python3環境的安裝參考這個

#python2 安裝

yum install pysvn -y

踩坑記錄:從我安裝情況來看,pysvn似乎時不相容python3.7,因為一直沒裝上,下面的報錯2一直搞不定,網上搜尋的教程就算裝上了也特別麻煩,果斷換環境

# python3.6 安裝

wget

#安裝依賴 ,若不安裝依賴會有報錯,見下面

yum install subversion-devel apr-devel apr-util-devel -y

#開始編譯安裝pysvn

tar xzf pysvn-1.8.0.tar.gz

cd pysvn-1.8.0/source/

python3 setup.py configure

make

cd pysvn/

#查詢python包的位置

find / -name site-packages

#建立pysvn資料夾

mkdir /usr/local/lib/python3.6/site-packages/pysvn

#把檔案拷過去完成

cp __init__.py /usr/local/lib/python3.6/site-packages/pysvn

cp _pysvn_3_6.so /usr/local/lib/python3.6/site-packages/pysvn

報錯1:執行python3 setup.py configure報錯

錯誤:('error:', 'cannot find svn include svn_client.h - use --svn-inc-dir')

解決:yum -y install subversion-devel

報錯2:執行make報錯,具體報錯找不到了,反正就這個檔案有錯,網上也找不到什麼解決辦法

make: *** [indirectpythoninte***ce.o] 錯誤 1
搜尋了一下,安裝成功的都是python3.6的,3.7就算成功了也是非常麻煩。。。權衡了一下,決定把python換成3.6的

果然十分順利,安裝完成,但是

報錯3import pysvn的時候報錯

[root@sonar pysvn]# python3

python 3.6.5 (default, apr 4 2020, 21:12:24)

[gcc 4.8.5 20150623 (red hat 4.8.5-39)] on linux

>>> import pysvn

traceback (most recent call last):

file "", line 1, in file "/usr/local/python3/lib/python3.6/site-packages/pysvn/__init__.py", line 106, in import pysvn._pysvn_3_7

modulenotfounderror: no module named 'pysvn._pysvn_3_7'

搜了半天也沒搜到怎麼回事,冥冥之中覺得是剛才安裝過了,第二次安裝的時候有些檔案沒覆蓋到,重下了pysvn1.8.0安裝就成功了

python3下import pysvn,沒報錯就成功了

獲取svn版本庫里日誌

client.log(url_or_path,

revision_start=pysvn.revision( opt_revision_kind.head ),

revision_end=pysvn.revision( opt_revision_kind.number, 0 ),

discover_changed_paths=false,

strict_node_history=true,

limit=0,

peg_revision=pysvn.revision(opt_revision_kind.unspecified ),

include_merged_revisions=false,

revprops=list_of_revprop_names)

各個引數:

url_or_pathsvn倉庫位址

revision_start從某個版本開始取日誌

revision_end到某個版本結束

discover_changed_paths,strict_node_history二選一,前者表示(?),後者表示日誌不會交叉複製

limit限制返回最大日誌數,0表示返回所有

peg_revision若url_or_path不存在,則自動選擇上乙個存在的修訂版本

include_merged_revisions不知道

revprops乙個字串列表,不知道幹嘛用的

返回

res = }
其中path是**相對路徑,action是新增/刪除/修改狀態

直接輸出client.log會得到乙個空陣列,要迴圈輸出每乙個值,如下

for info in log:

print(info.author,info.date,info.message,info.revision)

for e in info.changed_paths:

print(e.path)

print(e.action)

print(e.copyfrom_path)

print(e.copyfrom_revision)

根據**路徑匯出**

寫法:

import pysvn

client = pysvn.client()

file_content = client.export(svnurl, localpath)

具體引數:

revision = \

export( src_url_or_path,

dest_path,

force=false,

revision=pysvn.revision(),

native_eol=none,

ignore_externals=false,

recurse=true,

peg_revision=pysvn.revision( opt_revision_kind.unspecified ),

depth=depth,

ignore_keywords=false )

根據svn**位址src_url_or_path將檔案匯出到dest_path目錄下

ignore_externals=false忽略外部引數

recurse=false只匯出單個檔案,設為true遞迴匯出資料夾下檔案,預設為true

peg_revision指定某個版本的**位址

depth匯出目錄的深度

寫了乙個python指令碼根據日誌定時獲取svn倉庫**並交給cobra掃瞄的功能。

還沒想好放哪,再說。。。

Solarsi下編譯pysvn的問題

編譯pysvn 1.7.2版本出現下面問題 g shared o pysvn pysvn 2 5.so pysvn.o pysvn callbacks.o pysvn client.o pysvn static strings.o pysvn enum string.o pysvn client c...

python之迴圈中的那些事兒

盤點python中的迴圈也就那麼回事,廢話不羅嗦,下面一起看看吧!if 語句 python中if語句的一般形式如下所示 if condition 1 statement block 1 elif condition 2 statement block 2 else statement block 3...

python複習之 讀寫檔案的那些事

1.讀寫檔案是最常見的io操作。python內建了讀寫檔案的函式,用法和c是相容的。2.要以讀檔案的模式開啟乙個檔案物件,使用python內建的open 函式,傳入檔名和標示符 如f open users michael test.txt r r是讀的意思 可以用w寫來替換。files需要帶上檔案的...