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

如何在没有MANIFEST.in文件的情况下包含package_data?

漆雕和昶
2023-03-14
问题内容

我怎么能包括package_datasdist没有MANIFEST.in文件?

我的setup.py看起来像这样:

import setuptools

setuptools.setup(
    name='foo',
    version='2015.3',
    license='commercial',
    packages=setuptools.find_packages(),

    package_data={'': ['foo/bar.txt']},
)

版本:

user@host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
>>> import setuptools
>>> setuptools.version.__version__
'3.6'

我就是无法foo/bar.txt加入。

还是此博客文章仍然正确?
http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-
documentation-on–
package_data-/

不过,在过去的一个小时中,我了解到这些陈述介于“危险误导”和“该死的谎言”之间。
这是因为Python包的主要类型是源包,而使用来创建源包的规范方法setup.py sdist。但是,package_data中指定的数据不包括在源发行版中,它们仅包括在二进制(setup.py bdist)发行版和安装(setup.py install)中。

我怎么能包括package_datasdist没有MANIFEST.in文件?


问题答案:

TL; DRpackage_data字典中的键是 ;值是glob列表。''不是任何Python软件包的有效名称。

如果要bar.txt安装在__init__.py软件包的旁边foo,请使用

 package_data={'foo': ['bar.txt']}

我有布局:

foo/
        __init__.py
        bar.txt
setup.py

现在,如果foo是上述软件包,请执行以下操作:

import setuptools

setuptools.setup(
    name='foo',
    version='2015.3',
    license='commercial',
    packages=setuptools.find_packages(),
    package_data={'foo': ['bar.txt']},
)

之后python setup.py sdist,我检查dist/foo-2015.3.tar.gz

% tar tfz dist/foo-2015.3.tar.gz
...
foo-2015.3/foo/bar.txt
...

但是,如果我跑你setup.pypackage_data={'': ['foo/bar.txt']},我也同意了foo/bar.txt
不会添加到源代码分发, 除非这个foo-2015.3.egg- info/SOURCES.txt已经有行foo/bar.txt-在这种情况下,该文件将在源分布弹出太

没有使用清单。setuptools版本是3.6(我故意安装了与您使用的相同的旧版本):

>>> import setuptools
>>> setuptools.__version__
'3.6'

上面的行为在标准中也起作用distutils:2.6安装“旧版”
distutils文档的软件包数据;带有2.7、3.1的注释:

Changed in version [2.7, 3.1] : All the files that match package_data
will be added to the MANIFEST file if no template is provided.



 类似资料:
  • 我正在开发一个需要执行JavaScript的Java应用程序。Nashorn JS引擎即将被弃用,取而代之的是Graal SDK提供的一组API,它利用了GraalVM。基本上执行多种语言的虚拟机。 至少我是这么想的。所以我花了一天时间试图让它工作。我下载了使用JDK 8的GraalVM rc6。我使用IntelliJ IDEA并将GraalVM添加为新的JDK。我发现我应该添加虚拟机作为开发工具

  • 问题内容: 我正在尝试附加在没有日志文件的SQL Server Management Studio中。 我得到下面的错误。任何想法如何做到这一点? 执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo) 无法打开物理文件“ C:\ sql_logs \ YAFnet_log.ldf”。 操作系统错误2:“ 2(系统找不到指定的

  • 我正在尝试安装一个没有依赖项的python模块。 我跑: 但是这个安装依赖项,任何想法怎么能做到这一点?

  • 我使用了,但对于当前的问题,它没有帮助。我希望能够创建特定于项目的包: 我尝试了多种方法,但如何获得

  • 我想使用POST动词在带有flask restplus的VM上执行操作,但当没有主体时,它总是导致400。 结果是400{“消息”:“浏览器(或代理)发送了一个此服务器无法理解的请求。” 如果我只是简单地从post转换为get,它就可以正常工作。但是,我真的想使用POST动词,因为这是我需要遵循的标准动词,用于自定义非CRUD操作。我有没有用flask restplus把自己画到角落里? 注意:对

  • 问题内容: 我正在使用/ /在Mac OS X上进行一些研究计算。为了提高性能,我们从大学租了一个400节点的集群(使用Linux),以便可以并行完成任务。问题是我们不允许在集群上安装任何额外的软件包(否或任何安装工具),它们仅提供原始python本身。 然后如何在群集上运行脚本?有没有办法集成模块(我认为numpy和scipy也具有一些已编译的二进制文件),以便可以在不安装软件包的情况下进行解释