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

如何将其他文件添加到转盘?

赫连子石
2023-03-14
问题内容

如何控制转盘中包含哪些文件?似乎MANIFEST.in没有被使用python setup.py bdist_wheel

更新

我错了从源tarball安装与安装轮子之间的区别。源代码发行版包含中指定的文件MANIFEST.in,但已安装的软件包仅包含python文件。无论是通过源分发版,egg还是wheel安装,都需要采取步骤来确定应安装的其他文件。即,其他软件包文件需要package_data,而软件包外部文件(例如命令行脚本或系统配置文件)需要data_files。

原始问题

我有一个项目,我一直在使用python setup.py sdist来构建我的包,MANIFEST.in以控制包括和排除的文件,并pyroma和退房清单,以确认我的设置。

我最近将其转换为双重Python 2/3代码,并添加了setup.cfg

[bdist_wheel]
universal = 1

我可以用构建轮子python setup.py bdist_wheel,并且根据需要它似乎是通用轮子。但是,它不包括中指定的所有文件MANIFEST.in

安装了什么?

我进行了更深入的研究,现在对包装和车轮有了更多的了解。这是我学到的:

我将两个包文件上传到PyPi的multigtfs项目中:

  • multigtfs-0.4.2.tar.gz-源tar球,其中包括中的所有文件MANIFEST.in
  • multigtfs-0.4.2-py2.py3-none-any.whl -有问题的二进制分发。

我使用Python 2.7.5创建了两个新的虚拟环境,并安装了每个软件包(pip install multigtfs-0.4.2.tar.gz)。两种环境几乎相同。它们具有不同的.pyc文件,它们是“已编译”的Python文件。有些日志文件记录磁盘上的不同路径。从源tar球进行multigtfs-0.4.2-py27.egg- info的安装包括一个文件夹(详细说明安装),而轮式安装有一个multigtfs-0.4.2.dist- info文件夹,其中包含该过程的详细信息。但是,从使用multigtfs项目的代码角度来看,两种安装方法之间没有区别。

明确地说,我的测试都没有使用.zip文件,因此测试套件将失败:

$ django-admin startproject demo
$ cd demo
$ pip install psycopg2  # DB driver for PostGIS project
$ createdb demo         # Create PostgreSQL database
$ psql -d demo -c "CREATE EXTENSION postgis" # Make it a PostGIS database 
$ vi demo/settings.py   # Add multigtfs to INSTALLED_APPS,
                        # Update DATABASE to set ENGINE to django.contrib.gis.db.backends.postgis
                        # Update DATABASE to set NAME to test
$ ./manage.py test multigtfs.tests  # Run the tests
...
IOError: [Errno 2] No such file or directory: u'/Users/john/.virtualenvs/test/lib/python2.7/site-packages/multigtfs/tests/fixtures/test3.zip'

指定其他文件

使用答案中的建议,我向添加了一些其他指令setup.py

from __future__ import unicode_literals
# setup.py now requires some funky binary strings
...
setup(
    name='multigtfs',
    packages=find_packages(),
    package_data={b'multigtfs': ['test/fixtures/*.zip']},
    include_package_data=True,
    ...
)

这会将zip文件(以及自述文件)安装到该文件夹​​中,并且测试现在可以正确运行。感谢您的建议!


问题答案:

你有没有尝试使用package_data在你的setup.pyMANIFEST.in似乎是针对python版本<=
2.6的,我不确定是否还会使用更高版本。

在浏览https://github.com/pypa/sampleproject之后,他们MANIFEST.in说:

# If using Python 2.6 or less, then have to include package data, even though
# it's already declared in setup.py
include sample/*.dat

这似乎暗示此方法已过时。同时,setup.py他们在声明中:

setup(
    name='sample',
    ...
    # If there are data files included in your packages that need to be
    # installed, specify them here.  If using Python 2.6 or less, then these
    # have to be included in MANIFEST.in as well.
    package_data={
        'sample': ['package_data.dat'],
    },
    ...
)

(我不确定他们为什么选择其中的通配符MANIFEST.in和中的文件名setup.py。它们引用相同的文件)

再简单一点,这似乎又暗示该package_data路线优于该MANIFEST.in方法。好吧,除非您必须支持2.6,在这种情况下,我的祈祷会向您发出。



 类似资料:
  • 我正在学习JSwing,我发现了GridBagLayout。 我试图创建一个简单的计算器,我添加了多个JPanel设置每个首选大小,但当我调整窗框大小时,面板也不会调整大小。然后我发现了Gridbag的布局。 但我得到的是:GridBagLayout的计算器错误 } 应该是这样的:正确的计算器 我试过: 要锚定。。。但它不起作用, 创建多个JPanel(一个带有GridLayout),但不起作用

  • 我有一个包,它使用一个配置文件具有一个属性: 我使用ConfigAdmin的蓝图如下所示: 只要我可以更改属性的值并且包自动更新属性,这就很好。 我想知道是否有任何方法可以在不更改蓝图的情况下将新属性添加到我的配置文件中(这涉及再次编译/打包)。当然,我的包应该准备好处理新属性。 不确定这在OSGi是否有意义。谁能给我一点提示,告诉我如何向现有配置文件动态添加新属性,并使它们在ConfigAdmi

  • 问题内容: 我想将先前从其他文件(已经完成)中提取的一系列文件添加到jar中。这些文件将覆盖JAR中的文件。最有效的方法是什么?我需要它快。谢谢! 问题答案: 请记住,JAR文件是ZIP文件。 只需使用一些ZIP库。

  • 我需要帮助找到一种方法来获得一个Eclipse keystone文件,该文件具有应用程序转换为.jks文件的凭据,用于为应用程序的新版本签名。 用于创建原始应用程序的计算机被销毁,但密钥库文件被保存了下来。我在Android Studio(而不是Eclipse)上重新创建了这个应用程序,但现在我需要获得keystone文件,该文件包含信息和凭据,可以转换为.jks文件,这样我就可以使用它并将新版本

  • 我目前已经在iReport中打开了一个。jasper和。jrxml文件来编辑报告。我实际上只是添加一个新字段来保存变量“email”。 我设置了字段和变量。然而,当我编译时,我得到了这些错误。

  • 问题内容: 有没有办法在翡翠模板中内联? 想要执行此条件检查“内联”,如果fromEdit存在,则结果会将.in添加到div的末尾。 问题答案: 这有效: 在这里尝试。