【问题标题】:Conan package manager - how to remove folders during conan install?柯南包管理器 - 如何在柯南安装过程中删除文件夹?
【发布时间】: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姓名?)。在食谱中似乎不可行。
  • 该死,太糟糕了。你知道是否有办法复制文件并在此过程中重命名?

标签: c++ conan


【解决方案1】:

我结束了我们在包创建方面的解决方案。 根据需要重命名文件,然后直接使用它们

【讨论】:

  • 这听起来确实是一种更好的方法,而不是试图在消费者方面玩弄杂耍。如果包裹对消费者来说很难,这可能表明该包裹应该被修复,我错误地认为您无法控制您正在消费的包裹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2023-01-15
相关资源
最近更新 更多