1
votes

In the last few days, I was working on a python module. Until now, I used poetry as a packages management tool in many other projects, but it is my first time wanting to publish a package to PyPI.

I was able to run the poetry build and poetry publish commands. I was also able to also install the published package:

$ pip3 install git-profiles
Collecting git-profiles
  Using cached https://files.pythonhosted.org/packages/0e/e7/bac9027effd1e34a5b5718f2b35c0b28b3d67f3809e2f2981b6c7b58963e/git_profiles-1.1.0-py3-none-any.whl
Installing collected packages: git-profiles
Successfully installed git-profiles-1.1.0

However, right after the install, I am not able to run my package:

$ git-profiles --help
git-profiles: command not found

My project has the following structure:

git-profiles/
├── src/
│   ├── commands/
│   ├── executor/
│   ├── git_manager/
│   ├── profile/
│   ├── utils/
│   ├── __init__.py
│   └── git_profiles.py
└── tests

I tried to work with different scripts configurations in the pyproject.toml file but I've never been able to make it work after install.

[tool.poetry.scripts]
poetry = "src:git_profiles.py"

or

[tool.poetry.scripts]
git-profile = "src:git_profiles.py"

I don't know if this is a python/pip path/version problem or I need to change something in the configuration file.

If it is helpful, this is the GitHub repository I'm talking about. The package is also published on PyPI.

1

1 Answers

2
votes

Poetry's scripts sections wraps around the console script definition of setuptools. As such, the entrypoint name and the call path you give it need to follow the exact same rules.

In short, a console script does more or less this from the shell:

import my_lib  # the module isn't called src, that's just a folder name
               # the right name to import is whatever you put at [tool.poetry].name

my_lib.my_module.function()

Which, if given the name my-lib-call (the name can be the same as your module, but it doesn't need to be) would be written like this:

[tool.poetry.scripts]
my-lib-call = "my_lib.my_module:function"

Adapted to your project structure, the following should do the job:

[tool.poetry.scripts]
git-profile = "git-profiles:main"