为 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
我在清单中包含 tests
、bin
和 important_script.py
,并将 setup.py
中的 include_package_data
设置为 True。
然而,在 运行 pip install root_dir
之后,我看到它正确安装了 my_lib
但 bin
和 tests
只是直接放入 Lib/site-packages
就好像它们是单独的包一样。
我根本找不到important_script.py
,而且我认为它没有安装。
如何在我的安装中正确地包含这些 files/directories?
编辑
所以,原来bin
和tests
目录被直接放到site-packages
目录下是我之前做的事情导致的,但是我找不到什么。在某些时候,我的 root_dir
中生成了一个 build
和一个 dist
目录(我假设是通过 pip 或 setuptools?),之后我对项目所做的任何更改实际上都没有显示在已安装的包中。删除这些目录后,我无法再重现该问题。
示例项目既不分发 bin
也不分发 tests
,它甚至 explicitly excludes tests
.
要包含 bin
,您应该使用 scripts
or entry_points
(就像在示例项目中一样)。将此添加到您的 setup.py
至 setup()
通话中:
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
我创建了一个 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
我在清单中包含 tests
、bin
和 important_script.py
,并将 setup.py
中的 include_package_data
设置为 True。
然而,在 运行 pip install root_dir
之后,我看到它正确安装了 my_lib
但 bin
和 tests
只是直接放入 Lib/site-packages
就好像它们是单独的包一样。
我根本找不到important_script.py
,而且我认为它没有安装。
如何在我的安装中正确地包含这些 files/directories?
编辑
所以,原来bin
和tests
目录被直接放到site-packages
目录下是我之前做的事情导致的,但是我找不到什么。在某些时候,我的 root_dir
中生成了一个 build
和一个 dist
目录(我假设是通过 pip 或 setuptools?),之后我对项目所做的任何更改实际上都没有显示在已安装的包中。删除这些目录后,我无法再重现该问题。
示例项目既不分发 bin
也不分发 tests
,它甚至 explicitly excludes tests
.
要包含 bin
,您应该使用 scripts
or entry_points
(就像在示例项目中一样)。将此添加到您的 setup.py
至 setup()
通话中:
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