为 Python 包分发 "bin" 和 "tests" 目录的正确方法是什么?

What is the correct way to distribute "bin" and "tests" directories for a Python package?

我创建了一个 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_libbintests 只是直接放入 Lib/site-packages 就好像它们是单独的包一样。

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

如何在我的安装中正确地包含这些 files/directories?

编辑

所以,原来bintests目录被直接放到site-packages目录下是我之前做的事情导致的,但是我找不到什么。在某些时候,我的 root_dir 中生成了一个 build 和一个 dist 目录(我假设是通过 pip 或 setuptools?),之后我对项目所做的任何更改实际上都没有显示在已安装的包中。删除这些目录后,我无法再重现该问题。

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

要包含 bin,您应该使用 scripts or entry_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