相关疑难解决方法(0)

如何在Python setup.py中递归添加包数据?

我有一个新的库,必须包含很多小数据文件的子文件夹,我正在尝试将它们添加为包数据.想象一下,我有我的图书馆:

 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时保留文件树,因此保持文件结构的完整性对我们有利. .

python distutils setup.py

38
推荐指数
5
解决办法
2万
查看次数

设置setup.py以包装单个.py文件和单个数据文件,而无需创建任何文件夹

项目树:

$.
??? 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 packaging setup.py

35
推荐指数
2
解决办法
9053
查看次数

从PyPI安装我的sdist会将文件放在意想不到的位置

我的问题是,当我将我的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)

python distutils setuptools distribute pypi

7
推荐指数
1
解决办法
2299
查看次数

pip没有安装我的data_files.但easy_install确实如此

这将是一个简短的问题.

来源是:https://github.com/exhuma/grc

标题解释了我的问题;)

我注册并上传了包pypi.现在,如果我跑easy_install grc,它按预期工作.但如果我运行pip install grc,它安装正确,但不安装data_files.我不明白为什么会这样.有任何想法吗?

python pip easy-install setup.py

4
推荐指数
1
解决办法
1824
查看次数