【问题标题】:What is the correct way to distribute "bin" and "tests" directories for a Python package?为 Python 包分发“bin”和“tests”目录的正确方法是什么?
【发布时间】:2019-10-30 02:50:17
【问题描述】:

我创建了一个 python 包。

根据几个互联网来源(包括https://github.com/pypa/sampleproject)的建议,我设置了这样的目录结构:

root_dir
├── bin
│   └── do_stuff.py
├── MANIFEST.in
├── README.md
├── my_lib
│   ├── __init__.py
│   ├── __main__.py
│   └── my_lib.py
├── setup.cfg
├── setup.py
├── important_script.py
└── tests
    ├── __init__.py
    └── test_lib.py

我已在清单中包含testsbinimportant_script.py,并将setup.py 中的include_package_data 设置为True。

但是,在运行pip install root_dir 之后,我看到它正确安装了my_lib,但bintests 只是直接放入Lib/site-packages,就好像它们是单独的包一样。

我根本找不到important_script.py,而且我认为它没有安装。

如何在我的安装中正确包含这些文件/目录?

编辑

所以,原来bintests 目录被直接放入site-packages 目录是由我之前做的某事引起的,但我不知道是什么。在某些时候,我的root_dir 中生成了builddist 目录(我假设是通过pip 或setuptools 生成的?),之后我对项目所做的任何更改实际上都没有显示在已安装的包中。删除这些目录后,我不再能够重现该问题。

【问题讨论】:

  • 向我们展示您的setup.py

标签: python pip setuptools distutils


【解决方案1】:

示例项目既不分发bin 也不分发tests,甚至分发explicitly excludes tests

要包含bin,您应该使用scriptsentry_points(就像在示例项目中一样)。将此添加到您的 setup.pysetup() 通话中:

scripts=['bin/do_stuff.py'],

要包含tests,您应该重组您的树,以在包目录下包含目录tests

root_dir
├── bin
│   └── do_stuff.py
├── MANIFEST.in
├── README.md
├── my_lib
│   ├── __init__.py
│   ├── __main__.py
│   └── my_lib.py
│   └── tests
│       ├── __init__.py
│       └── test_lib.py
├── setup.cfg
├── setup.py
├── important_script.py

【讨论】:

  • 感谢您。我能够使用您的指示安装bintests 以及important_script.py 中的所有内容。我没想到我的bin 文件和important_script.py 会出现在Scripts 而不是Lib/site-packages,但这会起作用。
  • bin 文件和 important_script.py 显示在 Scripts 而不是 Lib/site-packages 这使得将它们添加到 $PATH 变得更加简单。您只需将Scripts 添加到$PATH 一次,之后的每个脚本都会自动在$PATH 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2016-01-12
  • 1970-01-01
  • 2014-05-22
相关资源
最近更新 更多