I just right now installed blender-bam through pip3, so the following should apply to the latest published version:
Given the following file structure:
Inside (...)/ I run:
bam pack -o foo/scene.blend -m FILE scene.blend
Which produces (BAM!):
scanning deps: b'/home/user/project/scene.blend'... blend: b'/home/user/project/scene.blend' archiving: 2 files copying: b'/home/user/project/textures/HDRI/Outdoor/Rocky Ridge-4k.hdr' -> b'/home/user/project/foo/textures/HDRI/Outdoor/Rocky Ridge-4k.hdr' Traceback (most recent call last): File "/usr/local/bin/bam", line 11, in <module> sys.exit(main()) File "/usr/local/lib/python3.5/dist-packages/bam/__init__.py", line 8, in main sys.exit(main(argv[1:])) File "/usr/local/lib/python3.5/dist-packages/bam/cli.py", line 2003, in main args.func(args) File "/usr/local/lib/python3.5/dist-packages/bam/cli.py", line 1797, in <lambda> filename_filter=args.exclude, File "/usr/local/lib/python3.5/dist-packages/bam/cli.py", line 1386, in pack filename_filter=filename_filter, File "/usr/local/lib/python3.5/dist-packages/bam/blend/blendfile_pack.py", line 502, in pack shutil.copy(src, dst) File "/usr/lib/python3.5/shutil.py", line 235, in copy copyfile(src, dst, follow_symlinks=follow_symlinks) File "/usr/lib/python3.5/shutil.py", line 115, in copyfile with open(dst, 'wb') as fdst: FileNotFoundError: [Errno 2] No such file or directory: b'/home/user/project/foo/textures/HDRI/Outdoor/Rocky Ridge-4k.hdr'
This is the affected line ( "/usr/local/lib/python3.5/dist-packages/bam/blend/blendfile_pack.py", line 502) and surrounding block:
for src, dst in path_copy_files: assert(b'.blend' not in dst) # in rare cases a filepath could point to a directory if (not os.path.exists(src)) or os.path.isdir(src): yield report(" %s: %r\n" % (colorize("source missing", color='red'), src)) else: yield report(" %s: %r -> %r\n" % (colorize("copying", color='blue'), src, dst)) --------------> shutil.copy(src, dst)
To me this looks like the target folder structure foo/textures/HDRI/Outdoor/ into which Rocky Ridge-4k.hdr should go is non-existent, while shutil.copy requires it to exist (it doesn't create it automatically).
Possible solution: os.path.exists and os.makedirs to the rescue?
I'll supply a localized patch myself if you wish so, but in case this issue lies dormant all over the place also elsewhere in bam, this probably should be adressed by you as the masterminds behind it. :)
Thanks! Looking forward to smooth bam operation after this fix :)