Hi Everyone. I have trouble getting an entry point to work for a CLI application.I hope you can help me.
Please don’t let the length of the post deter you. The problem is fairly straightforward; I have just tried to provide as much useful information as possible to the reader.
The Setup
OS: Ubuntu 20.04
Python: 3.8.5 | pip: 20.0.2 | venv
Repo
.
├── build
├── dist
├── source.egg-info
├── source
├── readme.md
├── requirements.txt
├── setup.py
└── venv
source dir
.
├── config
├── examples
├── script.py
├── __init__.py
├── tests
└── utils
The important directories within the source directory are config, which contains a few .env and .json files; and utils, which is a package that contains a sub-package called config.
Running script.py, which references config and imports modules from utils, is how the CLI app is started. Ideally when it is run, it should load a bunch of environment variables, create some command aliases and display the application’s prompt. (After which the user can start working within that shell.)
I created a wheel to install this application. The setup.py contains an entry point as follows:
entry_points={
'console_scripts': [
'script=source.script:main'
]
}
The Problem
I pip installed the wheel in a test directory with its own virtual environment. When I go to the corresponding site-packages directory and run python script.py, the CLI loads properly with the information about the aliases etc. However when I run simply script (the entry point) from the root directory of the environment the shell loads but I don’t see any of the messages about the aliases etc., and some of the functionality which depends on the utils package aren’t available either.
What could I be doing wrong? How can I make the command work as if it was running with all the necessary packages available?
Other information that may be useful
-
site-packageshas copies ofconfigandutils -
configis included in the package as part of thepackage_dataparameter insetup.pyas['./config/*.env', './config/*.json'] - All import statements begin from
source, i.e.from source.utils.config importetc. -
which scriptgives me the location as venv/bin/script, but thatbindirectory does not have the packages. (Which is expected, I think.)