【问题标题】:Where does setup.py install data files inside a virtualenv?setup.py 在 vi​​rtualenv 中的哪里安装数据文件?
【发布时间】:2016-05-10 14:20:51
【问题描述】:

我发现多个来源(https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distributehttp://blog.ionelmc.ro/2014/05/25/python-packaging/http://blog.ionelmc.ro/2014/06/25/python-packaging-pitfalls/)表明在 Python 包中分发数据文件的方法是使用 setuptools 的 include_package_data 选项和 MANIFEST.in。因此,我的包中的文件看起来像,

setup.py

setup( # ... include_package_data = True, # ... 文件的其余部分(希望不相关)被省略。

MANIFEST.IN

graft testdata include ChangeLog include README.rst include COPYING include COPYING.LESSER include tox.ini

当我在 virtualenv 中运行 setup.py install 或使用 pip 时,我最终得到了 Python 源文件本身,但在我能找到的任何地方都没有 testdata/。我认为这是我的包装中的一个错误,除了当我抓取另一个具有类似布局的包时,我也找不到数据文件。如果我克隆示例包https://github.com/ionelmc/python-nameless 的存储库并使用setup.py install 安装它,则该包将安装在目录lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/ 中。但是,我在 virtualenv 的任何地方都找不到任何数据文件或测试。他们应该在哪里结束?这应该如何工作?

我提出这个问题的动机是项目中的另一个贡献者希望通过 pip 安装运行需要数据文件的测试。这首先是正确的方法吗?

【问题讨论】:

  • 使用pkg_resources 发现您的数据文件。有关类似问题,请参阅我的 answer

标签: python pip setuptools distutils


【解决方案1】:

我的理解是你应该只是

include testdata

而不是 grafting 它 - 老实说,我实际上不确定 graft 做了什么。

另外我认为根本不需要指定include_package_data = True

【讨论】:

  • include 包括与模式匹配的文件,而不是目录。据我所知,这仅在遗留文档中进行了解释:docs.python.org/3/distutils/commandref.html。 (如果它在非旧文档中进行了解释,我不知道在哪里。)graft 包括整个目录。在我的 MANIFEST.in 和示例包中,include 用于单个文件,我也无法在 virtualenv 中找到这些文件。我在testdata/ 上也试过recursive-include,但也没有用。
  • 我昨天遇到了类似的问题。以前我在/etc/nepi 中手动存储复制和许可证,但这在virtualenv 下被破坏了。现在(见my git repo here)一切运行良好。如果您没有看到任何包含的文件,我怀疑还有其他问题。我还看到了include 与目录一起使用的示例,但没有证据表明它会起作用。我同意这方面的文档并不完全清楚:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
  • 2012-01-16
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多