plateau2minecraft
plateau2minecraft copied to clipboard
outputに./data/output以外を指定するとエラーになる問題を修正
以下のように --output のパラメタに ./data/output/ 以外のpathを指定すると最後のファイル保存処理で
出力pathが見つからない旨のエラーになりました。
原因は実装の一部が、outputの引数に関係なく./data/output/ 以下を出力先を想定している実装になっているようです。
現象
エラー発生時のコマンドとエラー内容:
>poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./output
2025-06-01 16:13:27,167 - INFO - Processing start: data\53393420_bldg_6697_op.gml
2025-06-01 16:13:27,168 - INFO - Triangulation: data\53393420_bldg_6697_op.gml
2025-06-01 16:16:07,445 - INFO - Voxelize: data\53393420_bldg_6697_op.gml
2025-06-01 16:18:06,700 - INFO - Processing end: data\53393420_bldg_6697_op.gml
2025-06-01 16:18:06,700 - INFO - Merging: [WindowsPath('data/53393420_bldg_6697_op.gml')]
2025-06-01 16:18:06,754 - INFO - To : [WindowsPath('data/53393420_bldg_6697_op.gml')]
origin_point: (15529769.0, 4246305.0)
save: r.-2.-1.mca
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 196, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.3056.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 86, in _run_code
exec(code, run_globals)
File "D:\oss\plateau2minecraft\src\plateau2minecraft\__main__.py", line 49, in <module>
region = Minecraft(merged).build_region(args.output)
File "D:\oss\plateau2minecraft\src\plateau2minecraft\converter.py", line 89, in build_region
region.save(f"{output}/world_data/region/{block_id}")
File "D:\oss\plateau2minecraft\src\plateau2minecraft\anvil\empty_region.py", line 348, in save
with open(file, "wb") as f:
FileNotFoundError: [Errno 2] No such file or directory: 'output/world_data/region/r.-2.-1.mca'
原因
具体的には、以下の処理は ./data/output/world_data/region が出力先として固定pathになっている。
- 出力先のpath存在チェック
- 存在する場合のファイル削除
- 存在しない場合のpath作成
一方、最終的に生成ファイルの出力先だけ {output}/world_data/region となるようになっている。
その結果、outputパラメタが ./data/output/ を指定している場合は問題ないようですが、
これ以外を指定するとpathがあらかじめ存在する場合以外はファイルsave時にpathが存在せずエラーとなるようです。
修正内容
上記の一部pathが固定されている箇所をすべて、
{output}/world_data/region
となり一貫したpathを参照するよう修正しました。
動作確認
ディレクトリが存在しない状態で以下2パターンを実行
poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./output
→ ./output/world_data/region にファイルが生成される
poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./data/output
→ ./data/output/world_data/region にファイルが生成される
ディレクトリと生成ファイルが存在する状態で以下を実行
poetry run python -m plateau2minecraft --target ./data/53393420_bldg_6697_op.gml --output ./data/output
→ ./data/output/world_data/regionのファイルが一度削除されて再び生成される