Rob*_*ith 5 python packaging setuptools
我正在尝试pip install .在conda环境中使用本地软件包.一切都看起来没问题,除了当我运行这个命令时,默认包含.pyc文件(我猜这是由于构建过程).在MANIFEST.in中明确排除它们没有帮助.首先,这是一个问题吗?setup.py实际上非常简单.主要是,唯一相关的事情是include_package_data = True我需要包含一些静态文件.
setup.py
from setuptools import setup, find_packages
setup(
...
include_package_data = True,
...
)
Run Code Online (Sandbox Code Playgroud)
这是MANIFEST.in
MANIFEST.in
recursive-include <my-project>/static *
global-exclude *.pyc
global-exclude .git
Run Code Online (Sandbox Code Playgroud)
另一个问题:我应该recursive-include <my-project>/test/ *在已安装的软件包中包含我的测试文件夹()吗?我有一些使用nose和其他客户端测试的测试,这些测试包含在静态文件中.在这种情况下,推荐的测试方法是什么?
谢谢
fja*_*rri 16
讨论越来越长,所以我在这里写下自己的想法.
一切都看起来没问题,除了当我运行这个命令时,默认包含.pyc文件(我猜这是由于构建过程).
Python源代码在安装时进行了预编译,.pyc文件与.py安装位置中的文件一起放置setuptools.这是正常的行为.
在MANIFEST.in中明确排除它们没有帮助.
MANIFEST.in管理分配,而不是安装.也就是说,它会setuptools在python setup.py sdist运行时告知存档中要包含哪些文件.它通常用于包含文档,测试,许可证和其他附带文件,这些文件是程序包的一部分,但实际上并未安装.这些文件被安装(除.py文件)中指定package_data的关键字参数setup().
另一个问题:我应该在已安装的软件包中包含我的测试文件夹(recursive-include/test/*)吗?
有两种可能的方法:
在分发中包含测试,但不安装它们.为此,您将它们放在一个单独的文件夹中,并在其中.py明确包含所有必需的文件(包括那些文件)MANIFEST.in.作为示例,请参阅我的一个项目的清单中的摘录:
recursive-include test *.py
include test/pylintrc
include test/.coveragerc
Run Code Online (Sandbox Code Playgroud)在包本身中包含测试,以便您可以将它们作为import package; package.test()(例如,numpy那样做)运行.无需修改MANIFEST.in,只需将它们放在主包目录中(作为子包或其他)并将它们视为常规子包/模块.
编辑:回答其他问题:
test_suite选项怎么样(例如nose.readthedocs.org/en/latest/setuptools_integration.html)?
我没有使用过这个特殊的选项(也许我应该),但我在另一个项目中也有类似的设置,它也python setup.py test可用 - 由Travis.CI用于自动测试运行.由于我是粉丝py.test,它需要一些接口; 因为nose它看起来会更简单.
一般来说,如果你能做到,做到这一点,这是一件好事(特别是对于持续集成).
包含测试作为子包会导致问题吗?
好吧,numpy还有很多其他套餐都做得很好.我看到的唯一缺点是:
总而言之,我没有任何反对意见,并且很可能在我的下一个项目中使用这种设置.
Python包装用户指南包含一个执行此操作的示例:packages = find_packages(exclude = ['docs','tests*'])
这样做是为了包括所有用于安装的Python包,但跳过.py包含不应作为包安装的文件的文件夹.您可以这样做,也可以手动提供包列表.这只是如何1从我上面的答案中实现场景的一个例子.在该场景中,2您的tests文件夹将位于主包文件夹中,并且find_packages()通常会被选中.
| 归档时间: |
|
| 查看次数: |
3243 次 |
| 最近记录: |