-vvv option).
I'm failing to use env. variables to set custom pypi credentials.
My pyproject.toml contains private pypi's like this:
[[tool.poetry.source]]
url = "https://XXXXX/nexus/repository/pypi-central/simple"
name = "nexus"
I'm running this script:
export POETRY_HTTP_BASIC_NEXUS_USERNAME=****
export POETRY_HTTP_BASIC_NEXUS_PASSWORD=****
poetry install
and it fails with:
[EnvCommandError]
Command ['/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/bin/pip', 'install', '--no-deps', '--index-url', 'https://XXXXX/nexus/repository/pypi-central/simple', '--extra-index-url', 'https://pypi.org/', 'six==1.12.0'] errored with the following return code 2, and output:
Looking in indexes: https://RESOLVED-XXXXX/nexus/repository/pypi-central/simple, https://****:****@XXXXX/nexus/repository/epd-pypi/simple, https://pypi.org/
Collecting six==1.12.0
....
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/download.py", line 386, in handle_401
username, password, save = self._prompt_for_password(parsed.netloc)
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/download.py", line 358, in _prompt_for_password
username = ask_input("User for %s: " % netloc)
File "/opt/.cache/pypoetry/virtualenvs/YYYY-4zvP7SOo-py3.8/lib/python3.8/site-packages/pip/_internal/utils/misc.py", line 281, in ask_input
return input(message)
EOFError: EOF when reading a line
User for XXXXX:
I investigated the code and it seems that credentials are never acquired separately from config, but always as a pair. That means that code never ask for http-basic.nexus.password and http-basic.nexus.username, but for http-basic.nexus then the value is used as a dict (search for password_manager.get_http_auth usage). I could not find single test case, so I wrote one, fill free to use it:
diff --git a/tests/config/test_config.py b/tests/config/test_config.py
index 07373ad..72ad236 100644
--- a/tests/config/test_config.py
+++ b/tests/config/test_config.py
@@ -14,3 +14,13 @@ def test_config_get_from_environment_variable(config, environ):
os.environ["POETRY_VIRTUALENVS_CREATE"] = "false"
assert not config.get("virtualenvs.create")
+
+def test_basic_http_credentials_through_env(config, environ):
+ assert config.get("http-basic.test_repo") is None
+
+ os.environ["POETRY_HTTP_BASIC_TEST_REPO_USERNAME"] = "foo"
+ os.environ["POETRY_HTTP_BASIC_TEST_REPO_PASSWORD"] = "bar"
+ credentials = config.get("http-basic.test-repo")
+ assert credentials is not None
+ assert credentials["username"] == "foo"
+ assert credentials["password"] == "bar"
I had a similar issue today. I spent a good part of my evening looking at poetry's source code. It seems, based on poetry's pyproject.toml, that poetry runs on anything python v2.7 thru v3.6.
Have you worked on your issue using, perhaps v3.6 or below?
Nope, I was trying on python 3.7.5 and some 3.8, I think :(
Thanks!
On 31 Jan 2020, at 16:51, Sébastien Eustace notifications@github.com wrote:
Closed #1807 via #1909.—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
This isn't working on the most recent release, 1.0.8.
I got the same error, but it was not related to the used python version. My mistake in a CI environment was exporting the environment variables POETRY_HTTP_BASIC_XXX_USERNAME + POETRY_HTTP_BASIC_XXX_PASSWORD and executing all the poetry config commands in one step and the poetry install in another where the env variables were not present anymore.
TLDR:
poetry install. Setting it before the poetry config commands you may execute does not persist them for later executions of poetry install.
Most helpful comment
This isn't working on the most recent release, 1.0.8.