構成管理ツールといえばGitがデファクトスタンダードですが、ひと昔前はSubversionが人気でした。
とある案件で、PythonでSubversion(以下、svn)を操作する機会があり実装していたところ、とても初歩的な不具合に遭遇しましたので、共有します。
結論、
Pythonからsvnを操作するときも、svnのコマンドラインツールインストールは必須です!
遭遇したエラー「FileNotFoundError」
pythonからsvnを操作するには、「svn」というパッケージのインストールが必要です。
pip install svn
詳細は下記を参照ください。

svn
Intuitive Subversion wrapper.
早速pythonからsvnを操作しようとすると、「FileNotFoundError」になってしまいました。
コードは以下
import svn.remote
r = svn.remote.RemoteClient('http://svn-server/repo')
r.checkout('/repo')
エラーは以下です。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Miniconda3\envs\svn-env\lib\site-packages\svn\remote.py", line 20, in checkout
self.run_command('checkout', cmd)
File "C:\Miniconda3\envs\svn-env\lib\site-packages\svn\remote.py", line 60, in run_command
return self.external_command(cmd, environment=self.__env, **kwargs)
File "C:\Miniconda3\envs\svn-env\lib\site-packages\svn\remote.py", line 29, in external_command
universal_newlines=decode_text)
File "C:\Miniconda3\envs\svn-env\lib\subprocess.py", line 356, in check_output
**kwargs).stdout
File "C:\Miniconda3\envs\svn-env\lib\subprocess.py", line 423, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Miniconda3\envs\svn-env\lib\subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "C:\Miniconda3\envs\svn-env\lib\subprocess.py", line 1017, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。
解決策
単純に、svnのコマンドラインツールをインストールし、pathを通す必要がありました。
svnのコマンドラインツールは以下にあります。
https://www.visualsvn.com/files/Apache-Subversion-1.13.0.zip
ダウンロードした.zipを解凍し、所望のフォルダに配置。
フォルダ内のbinにpathを通せば先ほどのコードも動作します。
まとめ
pythonでsvnを操作した際の不具合についてまとめました。
とても初歩的なことでしたが、中々気づきにくい不具合でした。
特に、「FileNotFoundError」というエラーメッセージからコマンドラインツールが入っていないという不具合に結び付きにくいですね。
以上!
コメント