如何将Python软件包(site-packages)中的文件复制到目录中?

3

情况是这样的:我有一个Python库,用于使用自定义协议与其他硬件通信。谁使用这个解决方案需要一个C代码库来实现通信的另一端。

我想到了一个简单的方法,将文件放在Python软件包中,并提供一个命令将文件复制到所选目录。文件已正确打包,但我不知道如何访问它们。我希望它会这么简单:

# 'pkgname' is a placeholder for package in site-packages.
shutil.copy('pkgname' + os.sep + 'filename', os.getcwd())

但是我得到了以下结果:
FileNotFoundError: [Errno 2] No such file or directory: 'pkgname\\filename'

有什么建议可以解决复制问题吗?或者是这个问题本身?


你真的有一个名为'pkgname\\filename'的文件夹吗?! - Kobi K
当然不是,这只是为了让大家知道它是什么。我是否写 <pkgname> 更好?我认为需要指定它,因为 site-packages 在 sys.path 中。这些文件在包中。 - Eirik M
你需要使用 os.path 对象来构建文件夹路径,例如 joindirname,然后将其作为参数传递给 copy - Kobi K
使用normpath可以使其跨平台,例如:normpath(join('my', 'path')) - Kobi K
@jsbueno: setup.py 运行良好,生成了带有文件的包。问题在于,软件包的用户需要一些 C 源代码,以便与他们自己的代码一起使用并构建其他软件。由于用户开发方式不同,因此不存在所谓的正确文件夹,所以我提供了一种从软件包中获取文件的方法。无论如何,感谢您的跟进 :) - Eirik M
显示剩余2条评论
1个回答

4

我找到了一个可行的解决方案,最重要的是我所寻找的是第一行:

pkgdir = sys.modules['<mypkg>'].__path__[0]
fullpath = os.path.join(pkgdir, <myfile>)
shutil.copy(fullpath, os.getcwd())

我犯了一个愚蠢的错误,没有导入相关的模块;看来显而易见的错误是最难发现的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接