【发布时间】:2022-01-14 17:18:59
【问题描述】:
我有一个本地的conanfile.py 来消费一个包,这个包已经位于本地缓存中(~/.conan/)。
在conanfile.py 中有imports() 函数,我在其中将一些文件从包复制到我的构建文件夹中。
我在不同的目录中有两个同名的文件,我将它们复制到同一个目录并重命名其中一个。
在我这样做之后,我留下了一个我想要删除的空目录,但无法从conanfile.py 找到这样做的方法,每次尝试似乎都会在文件运行之前删除该文件夹。我的导入如下所示:
class SomeConanPkg(ConanFile):
name = "SomeName"
description = "SomeDesc"
requires = (
"SomePkg/1.0.0.0@SomeRepo/stable")
def imports(self):
# copy of 1st file
self.copy("somefile.dll", src=os.path.join("src"), dst=os.path.join(build_dest))
# copy of 2nd file to nested directory
self.copy("somefile.dll", src=os.path.join("src", "folder"), dst=os.path.join(build_dst, "folder"))
# move and rename the file to parent directory
shutil.copy2(os.path.join(build_dst, "folder", "somefile.dll"), os.path.join(build_dst, "renamed_file.dll"))
# now build_dst/folder is an empty directory
我曾尝试使用conan tools.rmmdir() 或只是调用shutil.rmmtree(),但它们似乎都在文件被复制之前运行。
我还尝试添加 package() 或 deploy() 成员函数并在内部执行删除,但这些方法似乎根本没有运行(通过调试打印验证)。
有什么想法吗?
【问题讨论】:
-
copy()实际上发生在shutil.copy2和您可以执行的其他潜在删除之前。似乎问题是柯南对复制的文件进行了其他操作,所以它不希望这些文件会被移动或重命名(比如 dll 重命名不会破坏消费者,在构建时需要原始 dll姓名?)。在食谱中似乎不可行。 -
该死,太糟糕了。你知道是否有办法复制文件并在此过程中重命名?