I want to write a small personal package based on the tutorial: https://gehrcke.de/2014/02/distributing-a-python-command-line-application/ . The structure of the directory is showed here:
python-cmdline-bootstrap/
├── docs
├── test
├── bootstrap
│ ├── __init__.py
│ ├── __main__.py
│ ├── bootstrap.py
│ └── stuff.py
├── bootstrap-runner.py
├── LICENSE
├── MANIFEST.in
├── README.rst
└── setup.py
I further add a new module (src
) and script (case.py
) under bootstrap fold like this:
python-cmdline-bootstrap/
...
├── bootstrap
│ ├── __init__.py
│ ├── __main__.py
│ ├── bootstrap.py
│ ├── stuff.py
│ ├── src
│ ├── __init__.py
│ ├── case.py
├── bootstrap-runner.py
...
the content of case.py
showed below:
# -*- coding: utf-8 -*-
import argparse
def case():
print("This a new command.")
I add the following lines into the setup.py:
console_scripts = """
[console_scripts]
bootstrap = bootstrap.bootstrap:main
cccase = bootstrap.src.case:case
"""
When I execute python setup.py install
and run cccase
in the terminal after installation, it shows the error:
Traceback (most recent call last):
File "/home/chxp/tmp/python3-test/bin/cccase", line 11, in <module>
load_entry_point('cmdline-bootstrap==0.2.0', 'console_scripts', 'cccase')()
File "/home/chxp/tmp/python3-test/lib/python3.8/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/home/chxp/tmp/python3-test/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
return ep.load()
File "/home/chxp/tmp/python3-test/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2443, in load
return self.resolve()
File "/home/chxp/tmp/python3-test/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2449, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'bootstrap.src'
It works fine if I use ./bootstrap-runner.py
or python -m bootstrap
, I think it may the mistake in the setup.py
.
Thus, how do I revise the setup.py? I want to generate different command-line applications in a python package.
Meanwhile, how do I test multiple command-line applications by using ./bootstrap-runner.py
or python -m bootstrap
in a single run.
It seems I need to change the content in __main__.py
or bootstrap-runner.py
to test each command-line application, such as bootstrap
, cccase
.
The original scripts are upload at " https://gitee.com/chxp/python-cmdline-bootstrap " and download by git clone https://gitee.com/chxp/python-cmdline-bootstrap.git
.
Thanks for your help.
I saw the explanations here: Why do I need to include sub-packages in setup.py . It perfectly answer my problem.