当前位置: 首页 > 面试题库 >

setuptools:在软件包外部添加其他文件

钦海荣
2023-03-14
问题内容

我有一个python具有固定布局的应用程序,无法更改。我想使用setuptools将其包装起来,例如编写一个setup.py脚本。

使用官方文档,我能够编写第一个模板。但是,有问题的应用程序使用了很多其他数据文件,这些文件不是任何程序包的明确组成部分。这是一个示例源树:

somepackage
   __init__.py
   something.py
   data.txt
additionalstuff
   moredata.txt
INFO.txt

这是麻烦所在:中的代码something.py
读取文件moredata.txtINFO.txt。对于前者,我可以通过添加一个空additionalstuff/__init__.py文件将其升级additionalstuff到程序包并由拾取来修补该问题setuptools。但是我怎么可能增加INFO.txt我的.egg呢?

所提出的解决方案使用了类似

package_data = { '' : ['moredata.txt','INFO.txt']}

不适用于我,因为文件moredataINFO.txt不属于包,而是属于单独文件夹的一部分,该文件夹只是整个模块的一部分,而不是任何单独的包。如上所述,可以moredata.txt通过将__init__.py文件添加到additionpythonalstuff,从而将其升级为程序包来解决此问题。但是,这不是一个很好的解决方案,它根本不适用于INFO.txt,它位于顶级目录中。

根据公认的答案,这是解决方案

这是setup.py

from setuptools import setup, find_packages

setup(
    name='mytest',
    version='1.0.0',
    description='A sample Python project',
    author='Test',
    zip_safe=False,
    author_email='test@test.com',
    keywords='test',
    packages=find_packages(),
    package_data={'': ['INFO.txt', 'moredata.txt'],
                  'somepackage':['data.txt']},
    data_files=[('.',['INFO.txt']),
                ('additionalstuff',['additionalstuff/moredata.txt'])],
    include_package_data=True,
)

这是MANIFEST.in

include INFO.txt
graft additionalstuff
include somepackage/*.txt

问题答案:

也有 data_files

data_files=[("yourdir",
             ["additionalstuff/moredata.txt", "INFO.txt"])],

考虑一下要将这些文件放在何处。文档中的更多信息。



 类似资料:
  • 我有一个python包fsspec。该库提供了一种注册外部文件系统(后端集成)的方法。注册所需文件系统的一种方法是将其添加到setuptools中的入口点。 为了完成任务,我们可以在设置中手动添加入口点。然后安装该软件包。但我要寻找的是一种通过编程在fsspec包安装前/安装后创建条目的方法。

  • 问题内容: 我使用google-perf工具(tcmalloc)库编译了Python 2.6.6,以消除默认2.6.5下的内存问题。在获得2.6.6后,它似乎无法正常工作,因为我认为在Ubuntu中安装默认的2.6.5存在问题。从软件渠道安装的二进制文件(如wxPython和setuptools)在2.6.6下不能正常工作。这些是否需要重新编译?还有其他建议可以使其顺利运行。是否可以在不更改路径的

  • 问题内容: 我正在尝试编译,安装和运行一个我们称为的软件包。它包含一个从库调用该函数的文件。当前,当我运行导入包的脚本时,会收到以下错误消息: 据我了解(我是python和cython的新手),与C库的链接尚未在我的程序包中执行。实际上,我的文件如下所示: 如您所见,我的文件使用。我决定这样做是因为《Python打包用户指南》建议这样做。但是,使用Cython文档中的说明代替。通过调用链接库。如何

  • 问题内容: 如果文件中有一组方法,是否可以将这些文件包含在另一个文件中,但不带任何前缀(即文件前缀)调用它们? 所以,如果我有: 我怎么这样称呼它: 问题答案: 您将需要将其他文件作为模块导入,如下所示: 如果您不想在函数名称前加上模块名称,请执行以下操作: 如果要导入模块的所有成员,请执行以下操作: 编辑: 这是Dive Into Python 的精彩一章,在该主题上有更深入的介绍。

  • 问题内容: 使用setuptools时,无法让安装程序提取任何文件。我读过的所有内容都表明,以下是正确的方法。有人可以请教吗? 数据文件的位置在哪里。 问题答案: 我知道这是一个老问题,但人们发现这里通过谷歌自己的方式: 是低了下来,肮脏的谎言。它仅在构建 二进制 软件包()时使用, 而 在构建源软件包()时不使用。当然,这是荒谬的-人们希望构建源代码分发将导致文件的集合,这些文件可以发送给其他人

  • 问题内容: 我有以下目录结构: 我想为some_project安装依赖项。我知道我可以CD进入some_project然后运行npm install 但是我想知道是否可以不更改目录?就像是 问题答案: 您可以将变体与选项一起使用。在您的方案中,文件夹和前缀将相同: