【问题标题】:How can I copy files from a Python package (site-packages) to a directory?如何将文件从 Python 包(站点包)复制到目录?
【发布时间】:2015-11-03 13:03:13
【问题描述】:

情况是这样的:我有一个 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'吗?!
  • 当然不是,只是说明它是什么。如果我写 会更好吗?我认为需要指定它,因为站点包位于 sys.path 中。文件在包中。
  • 您需要使用os.path 对象如joindirname 构建文件夹路径,然后将其作为参数传递给copy
  • 有没有办法只知道已安装包的名称?我希望它可以在多个平台(Windows、Linux)上工作。
  • 使用normpath也可以跨平台如:normpath(join('my', 'path'))

标签: python python-3.x setuptools


【解决方案1】:

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

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

还犯了一个愚蠢的错误,即不导入有问题的模块;猜测最明显的错误是最难找到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多