Python 将文件包括在顶级目录中的setuptools
任务很简单:我有一个扩展名不是Python 将文件包括在顶级目录中的setuptools,python,python-3.x,setuptools,Python,Python 3.x,Setuptools,任务很简单:我有一个扩展名不是py的文件,它需要与包一起分发。在本例中,我们将其命名为.config.json 我试着把它放在MANIFEST.in中作为include.config.json——这没有效果 我尝试了package_data={'':['.config.json']}-这也没有效果 我还尝试了data_files=[(''''.'.config.json')]-这会导致不相关的错误:错误:无法复制'.':不存在或不是常规文件 除了自己编写一个构建命令之外,我找不到任何可以让它工作
py
的文件,它需要与包一起分发。在本例中,我们将其命名为.config.json
我试着把它放在MANIFEST.in
中作为include.config.json
——这没有效果
我尝试了package_data={'':['.config.json']}
-这也没有效果
我还尝试了data_files=[(''''.'.config.json')]
-这会导致不相关的错误:错误:无法复制'.':不存在或不是常规文件
除了自己编写一个构建命令之外,我找不到任何可以让它工作的方法。而且,是的,我在GitHub上的bug trackers中看到了大量类似的问题。我知道setuptools
和distutils
基本上都被彻底破坏了,但也许有什么合理的方法可以让它发挥作用?我不敢相信这么简单的事情还没有解决
根据要求,
setup.py
:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
setup(
name='project_name',
version='0.1.0',
description='Project Name in Caps',
author='My Company',
author_email=','.join(
'{}@domain.com'.format(name) for name in
list_of_names
),
url='https://somewhere',
packages=find_packages(),
# package_data={
# '': ['.config.json'],
# },
# data_files=[('', '.config.json')],
install_requires=[
'pytest >= 3.4.2',
...
],
)
在`setup.py中:
package_data={'package': ['../.config.json']}
这种方法的问题在于,egg会将.config.json
安装到站点软件包中/
,这几乎不是您想要的,也肯定不是用户对软件包的期望
PS.
MANIFEST.in
没有帮助,因为它仅用于源代码分发(python setup.py sdist
)。数据文件是您想要的,但您需要确保文件名包含在列表中:
data_files=[('', ['.config.json'])],
当我运行您的setup.py
时,这对我来说很有用,“顶级目录”是什么意思?您想将文件安装到站点软件包/
还是站点软件包/mypackage/
?@phd站点软件包/软件包版本。egg
您可以发布您的setup.py
?@WillKeeling,并用setup.py更新。“您需要将文件config.json
放到包/
”-不,我没有。如果我这样做,它会出现在错误的位置(而不是site-package/package-version.egg/.config.json
,它会被发送到site-package/package-version.egg/package/.config.json
)好的,这确实做到了。非常感谢。但是,您所说的“egg将安装”是什么意思?egg
不是一个程序,而是一种格式。当我运行setup.py install
时,结果与您描述的不同。那么,这是怎么回事?我想我现在可以回答我自己的问题:whl
和egg
格式不兼容,因为它们如何处理源位置。因此,如果我运行setup.py install
,它会正确安装,但是如果我运行setup.py bdist\u wheel&&pip install./bdist/*.whl
,我会得到不同的结果。我知道Python打包是垃圾,但这真的很低。。。