【问题标题】:Create a python package & install it as source distribution and not a .egg?创建一个python包并将其安装为源分发而不是.egg?
【发布时间】:2023-07-03 19:11:02
【问题描述】:

我有一个 python 包,它在data 文件夹中有几个数据文件,使用包时必须读取这些文件;这些不是 python 脚本。但是,当我安装我的包以使用python setup.py install --user 对其进行测试时,只安装了一个~/.local/lib/python2.7/site-package/mypackage-1.0.0-py2.7.egg,因此代码无法读取data 目录。

我看到像numpy 这样的其他软件包安装了*.dist-infonumpy 文件夹。

如何让我的包安装成这样?

【问题讨论】:

  • 子文件夹不是直接安装而是需要像import mypackage.data.whatever那样导入的吗?这里有一个关于这个*.com/questions/8953844/…的问题或者你可以参考module documentation
  • 这与“如何让我的包安装成那样?”无关。如果我只想使用您描述的方法,MANIFEST.insetuptools.setup 中的 include_package_data 有什么意义?
  • 据我了解,include_package_data 旨在用于非 python 文件,如自述文件、文档、原始数据、图像等。这至少是我从 python-packaging docs 得到的。
  • 没错。我什么时候说我想执行一个脚本?为了清楚起见,我会更新我的问题。
  • 好吧,那是一个缺失的信息,也许是我的错误。无论如何,您是否尝试使用MANIFEST.in,在其中指定您的数据文件,例如include data/*.*,最后在setuptools 中指定include_package_data=True? “因此代码无法读取数据目录”实际上是什么意思?为什么它不应该读取数据目录?这不是取决于代码而不是安装吗?

标签: python package installation setup.py sdist


【解决方案1】:
python setup.py sdist
pip install dist/*.tar.gz --user

sdistdist/ 中创建一个作为tar.gz 的Source Archine。 pip 然后将其安装到用户的站点包目录。

More info here.

【讨论】:

    最近更新 更多