【python】svnでFileNotFoundError

ソフトウェア

 

構成管理ツールといえば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」というエラーメッセージからコマンドラインツールが入っていないという不具合に結び付きにくいですね。

 

以上!

 

コメント