poetry: Can't use private repository in `poetry add`

Poetry version: 0.10.3 Python Version: 3.6.5

(Note: I redacted URL of my private repository)

pyproject.toml:

[tool.poetry]
name = "project"
version = "0.1.0"
description = ""
authors = []

[[tool.poetry.source]]
name = "private"
url = "<url>"

[tool.poetry.dependencies]
python = "^3.6"

[tool.poetry.dev-dependencies]
pytest = "^3.5"

I ran the following two commands:

  • poetry config repositories.private <url>
  • poetry config http-basic.private <username>

Checking the config files on disk, the values are correct.

When I run poetry search <private package> or poetry add <private package> poetry cannot find the package. Here’s the output of poetry -vvv add:

poetry -vvv add <private package>
                                  
[ValueError]       
Package [<private package>] not found.  
                                  
Exception trace:
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cleo/application.py in run() at line 94
   status_code = self.do_run(input_, output_)
 /usr/local/lib/python3.6/site-packages/poetry/console/application.py in do_run() at line 87
   return super(Application, self).do_run(i, o)
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cleo/application.py in do_run() at line 197
   status_code = command.run(input_, output_)
 /usr/local/lib/python3.6/site-packages/poetry/console/commands/command.py in run() at line 72
   return super(BaseCommand, self).run(i, o)
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cleo/commands/base_command.py in run() at line 146
   status_code = self.execute(input_, output_)
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cleo/commands/command.py in execute() at line 107
   return self.handle()
 /usr/local/lib/python3.6/site-packages/poetry/console/commands/add.py in handle() at line 65
   packages, allow_prereleases=self.option("allow-prereleases")
 /usr/local/lib/python3.6/site-packages/poetry/console/commands/init.py in _determine_requirements() at line 215
   requirement["name"], allow_prereleases=allow_prereleases
 /usr/local/lib/python3.6/site-packages/poetry/console/commands/init.py in _find_best_version_for_package() at line 245
   name, required_version, allow_prereleases=allow_prereleases
 /usr/local/lib/python3.6/site-packages/poetry/version/version_selector.py in find_best_candidate() at line 28
   package_name, constraint, allow_prereleases=allow_prereleases
 /usr/local/lib/python3.6/site-packages/poetry/repositories/pool.py in find_packages() at line 83
   name, constraint, extras=extras, allow_prereleases=allow_prereleases
 /usr/local/lib/python3.6/site-packages/poetry/repositories/pypi_repository.py in find_packages() at line 90
   info = self.get_package_info(name)
 /usr/local/lib/python3.6/site-packages/poetry/repositories/pypi_repository.py in get_package_info() at line 225
   name, lambda: self._get_package_info(name)
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cachy/repository.py in remember_forever() at line 174
   val = value(callback)
 /usr/local/lib/python3.6/site-packages/poetry/_vendor/cachy/helpers.py in value() at line 6
   return val()
 /usr/local/lib/python3.6/site-packages/poetry/repositories/pypi_repository.py in <lambda>() at line 225
   name, lambda: self._get_package_info(name)
 /usr/local/lib/python3.6/site-packages/poetry/repositories/pypi_repository.py in _get_package_info() at line 231
   raise ValueError("Package [{}] not found.".format(name))

add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)...

We use pypicloud for our private repository.

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Reactions: 6
  • Comments: 22 (9 by maintainers)

Commits related to this issue

Most upvoted comments

Why is this issue closed?

poetry add still does not work for packages in private repos. The repo is configured:

poetry  config --list
settings.virtualenvs.create = true
settings.virtualenvs.in-project = false
settings.virtualenvs.path = "/Users/xxx/Library/Caches/pypoetry/virtualenvs"
repositories.my.url = "http://pypi.my.domain.net/simple/"
$ poetry add mypackage==1.3.2
                                  
[PackageNotFound]  
Package [mypackage] not found.  

See also verbose output.

There is no authentication in my repo.

The path from repositories.my.url works well with pip install.

I was able to overcome this by adding the package manually into pyproject.toml as well as this section:

[[tool.poetry.source]]
name = "my"
url = "http://pypi.my.domain.net/simple/"

Then I deleted poetry.lock and issued poetry install. Now I got it in the ‘lock’ file, but this seems too cumbersome.

@sdispater should I open a new issue?

P.S. My username, package name and URL are consistently changed into other values.

$ poetry --version
Poetry 0.12.17

This issue should be reopened. The problem still happens in poetry 1.0.5.

I have the same problem poetry 1.0.5.

Any news on this? @sdispater?

For those who get the “Could not find a matching version of package <my package>” when trying to install from private repo

$ poetry add my_package 

ValueError
Could not find a matching version of package my_package

Try to add /simple/ to the url of the repo which you have used in pyproject.toml:

[[tool.poetry.source]]
name = "myrepo"
url = "https://my.rul/simple/"

That solved the problem for me with AWS CodeArtifact repository. Curiously, during authentication for publishing while setting the poetry config repositories.myrepo $URL and poetry config http-basic.myrepo $USER $TOKEN I had to use CodeArtifact url WITHOUT /simple/ at the end.

EDIT: I’ve fixed this, by adding /simple/ to the end of my config repo, and now the debug log actually checks my custom repo. A warning about a bad URL would be very helpful, though.

Same issue in 1.0.5. Debug output indicates poetry doesn’t even look at the custom repo:

!poetry config --list
cache-dir = "/Users/X/Library/Caches/pypoetry"
repositories.X.url = "https://sonatype.services.X.com/repository/pypi-internal/"
virtualenvs.create = true
virtualenvs.in-project = false
virtualenvs.path = "{cache-dir}/virtualenvs"  # /Users/X/Library/Caches/pypoetry/virtualenvs
!poetry add my-package -vvv
Using virtualenv: /Users/X/Library/Caches/pypoetry/virtualenvs/X-BmgmJgwc-py3.7
PyPI: No packages found for my-package *

[ValueError]
Could not find a matching version of package my-package

Traceback (most recent call last):
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/clikit/console_application.py", line 131, in run
    status_code = command.handle(parsed_args, io)
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/clikit/api/command/command.py", line 120, in handle
    status_code = self._do_handle(args, io)
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/clikit/api/command/command.py", line 171, in _do_handle
    return getattr(handler, handler_method)(args, io, self)
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/cleo/commands/command.py", line 92, in wrap_handle
    return self.handle()
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/poetry/console/commands/add.py", line 89, in handle
    packages, allow_prereleases=self.option('allow-prereleases')
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/poetry/console/commands/init.py", line 302, in _determine_requirements
    requirement['name'], allow_prereleases=allow_prereleases
  File "/Users/X/Library/Python/3.7/lib/python/site-packages/poetry/console/commands/init.py", line 338, in _find_best_version_for_package
    'Could not find a matching version of package {}'.format(name)

!poetry --version
Poetry version 1.0.5

And here’s the project config

[tool.poetry]
name = "X"
version = "0.1.0"
description = ""
authors = ["X"]

[[tool.poetry.source]]
name = 'X'
url  = 'https://sonatype.services.X.com/repository/pypi-internal/'
secondary = true

[tool.poetry.dependencies]
python = "^3.7"
Django = "<3.0"

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

The weird part is that I had poetry downloading dependencies from our custom PyPI repository, but once I uploaded a package myself, it doesn’t like it.

still a source of confusion not mentioned in any docs I could find. @LSaldyt fix worked though.

With version 1.0.0b9 it shows this:

$ poetry add -vvv mypackage==1.3.2
Using virtualenv: /Users/xxx/Library/Caches/pypoetry/virtualenvs/peapi-7kyxBY5Q-py3.8
PyPI: 0 packages found for mypackage 1.3.2

[ValueError]
Could not find a matching version of package mypackage

Traceback (most recent call last):
  File "/Users/xxx/.poetry/lib/poetry/_vendor/py3.8/clikit/console_application.py", line 131, in run
    status_code = command.handle(parsed_args, io)
  File "/Users/xxx/.poetry/lib/poetry/_vendor/py3.8/clikit/api/command/command.py", line 120, in handle
    status_code = self._do_handle(args, io)
  File "/Users/xxx/.poetry/lib/poetry/_vendor/py3.8/clikit/api/command/command.py", line 171, in _do_handle
    return getattr(handler, handler_method)(args, io, self)
  File "/Users/xxx/.poetry/lib/poetry/_vendor/py3.8/cleo/commands/command.py", line 92, in wrap_handle
    return self.handle()
  File "/Users/xxx/.poetry/lib/poetry/console/commands/add.py", line 88, in handle
    requirements = self._determine_requirements(
  File "/Users/xxx/.poetry/lib/poetry/console/commands/init.py", line 314, in _determine_requirements
    name, _ = self._find_best_version_for_package(
  File "/Users/xxx/.poetry/lib/poetry/console/commands/init.py", line 338, in _find_best_version_for_package
    raise ValueError(

If I add [[tool.poetry.source]] in poetry.toml poetry add works. But isn’t it supposed to work right away with all the configured repositories?

Edit: I don’t think so because:

When you specify a dependency in pyproject.toml, Poetry first take the name of the package that you have requested and searches for it in any repository you have registered using the repositories key. If you have not registered any extra repositories, or it does not find a package with that name in the repositories you have specified, it falls back on PyPI. (https://python-poetry.org/docs/basic-usage/#version-constraints)

have you tried changing if you’re using the /simple/ index (or some other equivalent), and then toggling the trailing slash? I’ve found that it’s pretty finicky about which url goes where, and after running into your problem it just…fixed itself after a few different urls. (currently using /simple with no slash)

It’d be nice to have some attempted diagnostics (like wrong format vs 404/403 or something).