我有一个新的库,必须包含很多小数据文件的子文件夹,我正在尝试将它们添加为包数据.想象一下,我有我的图书馆:
library
- foo.py
- bar.py
data
subfolderA
subfolderA1
subfolderA2
subfolderB
subfolderB1
...
Run Code Online (Sandbox Code Playgroud)
我想通过setup.py添加所有子文件夹中的所有数据,但似乎我手动必须进入每个子文件夹(有100个左右)并添加一个init .py文件.此外,setup.py会递归地找到这些文件,还是需要在setup.py中手动添加所有这些文件,如:
package_data={
'mypackage.data.folderA': ['*'],
'mypackage.data.folderA.subfolderA1': ['*'],
'mypackage.data.folderA.subfolderA2': ['*']
},
Run Code Online (Sandbox Code Playgroud)
我可以用脚本做到这一点,但似乎是一种超级痛苦.我怎样才能在setup.py中实现这一点?
PS,这些文件夹的层次结构非常重要,因为这是一个包含材料文件的数据库,我们希望在向用户提供GUI时保留文件树,因此保持文件结构的完整性对我们有利. .
项目树:
$.
??? happy_birthday-art.txt
??? happy_birthday.py
??? MANIFEST.in
??? README.rst
??? setup.py
Run Code Online (Sandbox Code Playgroud)
setup.py
from setuptools import setup
setup(
name='Happy_birthday',
py_modules=['happy_birthday'],
data_files=['happy_birthday-art.txt'],
entry_points={
'console_scripts': ['happy_birthday = happy_birthday:main', ],},
long_description=open('README.rst').read(),
)
Run Code Online (Sandbox Code Playgroud)
现在,当我在虚拟环境中执行python setup.py sdist然后pip install创建的.tar.gz文件时,我收到以下消息:
warning: install_data: setup script did not provide a directory for 'happy-birthday-art.txt' -- installing right in '/home/username/.virtualenvs/happy_birthday'
Run Code Online (Sandbox Code Playgroud)
该程序使用该.txt文件,因此在尝试之后运行它时会失败.
但我不想安装happy_birthday-art.txt到单独的文件夹中.我想将它安装在安装的文件夹中happy_birthday.py.另外,我不想使用绝对路径setup.py.我如何最好地设置我的setup.py文件?
我的问题是,当我将我的Python包上传到PyPI,然后使用pip从那里安装它时,我的应用程序中断,因为它将我的文件安装到完全不同的位置,而不是我从本地sdist安装完全相同的包.
从本地sdist安装将文件放在我的系统上,如下所示:
/Python27/
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
data/ (images and shader source)
doc/ (html)
examples/ (.py scripts that use the library)
gloopy/ (source)
Run Code Online (Sandbox Code Playgroud)
这就像我期望的那样,并且运行正常(例如我的源代码可以找到我的数据目录,因为它们彼此相邻,就像它们在开发中一样.)
如果我将相同的sdist上传到PyPI,然后使用pip从那里安装它,那么事情看起来非常不同:
/Python27/
data/ (images and shader source)
doc/ (html)
Lib/
site-packages/
gloopy-0.1.alpha-py2.7.egg/ (egg and install info files)
gloopy/ (source files)
examples/ (.py scripts that use the library)
Run Code Online (Sandbox Code Playgroud)
这根本不起作用 - 我的应用程序无法找到它的数据文件,加上显然它是一团糟,用我所有的垃圾污染顶级/ python27目录.
我究竟做错了什么?如何使pip安装表现得像本地sdist安装?这甚至是我应该努力实现的目标吗?
我安装了setuptools,也分发了,我正在调用distribute_setup.use_setuptools()
WindowsXP,Python2.7.
我的开发目录如下所示:
/gloopy
/data (image files and GLSL shader souce read at runtime)
/doc (html files)
/examples (some …Run Code Online (Sandbox Code Playgroud) 这将是一个简短的问题.
来源是:https://github.com/exhuma/grc
标题解释了我的问题;)
我注册并上传了包pypi.现在,如果我跑easy_install grc,它按预期工作.但如果我运行pip install grc,它安装正确,但不安装data_files.我不明白为什么会这样.有任何想法吗?
python ×4
setup.py ×3
distutils ×2
distribute ×1
easy-install ×1
packaging ×1
pip ×1
pypi ×1
setuptools ×1