-
Notifications
You must be signed in to change notification settings - Fork 2.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
poetry install fails on KeyError even for defined environment variables #3199
Comments
@pepastach do you have any additional system information around cores availabe etc? Even any reference to the speciifcation of the runner the above occurs in. |
It runs in AWS on m4.xlarge instances in Docker. That's 4 cores, 16 GB RAM, 2.3 GHz Intel Xeon® E5-2686 v4 (Broadwell) processors or 2.4 GHz Intel Xeon® E5-2676 v3 (Haswell) processors |
Any limits on the container instances? Particularly CPU or Memory? |
No. When we run distributed unit tests, it reports 4 cores as it should. And memory is plenty. All the machine resources are available to the docker container running poetry. |
Thanks @pepastach will try reproduce it. |
This comment has been minimized.
This comment has been minimized.
@jihadik as far as I know you can't disable parallel install in poetry 1.1.2 |
@pepastach actually you can. |
Thanks @kosta-p that seems to help. I ran our CI/CD three times and all runs passed. For anyone experiencing this issue, try disabling parallel installer before running
|
Same error encountered during Gitlab CI, and disabling parrallel installer as noted above worked. |
For issues relating to connection reset errors; please see #3219 (comment). We would like to keep this issue focussed on the key error issue. |
Same happening here in GitLab CI. 1.1.3 didn't fix it. |
I'm receiving the same error in the gitlab-runner. As far as I can see, the issue occurs for me only when using the docker executor with linked services. It doesn't seem to occur if I don't have any linked services. It seems not to occur if I run the same install in docker-compose with the same linked services, it seems specific to the gitlab-runner. The issue does not occur if I disable the new installer with I hope this helps to narrow down the problem. |
@AzMoo @max-wittig are you referring to the KeyError or the connection reset error? |
@abn Sorry, I am referring specifically to the KeyError as described in the original post by @pepastach I have also seen it raise an EnvCommandError. |
Thanks for confirming @AzMoo appreciate it. |
I've created a repo here: https://github.com/AzMoo/gitlab-poetry-test that replicates the issue. I've found it doesn't require linked services, just to be running in the gitlab-runner with the docker executor, and to install a fairly significant amount of packages. |
Replace updates of os.environ with explcit passing of `env` to subprocess calls. Relates-to: python-poetry#3199
Unfortunately I was unable to reproduce the issue on my machine. I do not have access to a gitlab environment readily to test. But, can you please try the fix at #3253. See if that makes a difference? Using pipxpipx install --suffix=@3253 'poetry @ git+https://github.com/python-poetry/poetry.git@refs/pull/3253/head' Using a container (podman | docker)podman run --rm -i --entrypoint bash python:3.8 <<EOF
set -xe
python -m pip install -q git+https://github.com/python-poetry/poetry.git@refs/pull/3253/head
git clone https://github.com/AzMoo/gitlab-poetry-test
pushd gitlab-poetry-test
poetry install
EOF |
@AzMoo @max-wittig https://gitlab.com/abn/poetry-issue-3199/-/jobs/801924761 The errors seem to be package build related not the issue described here. |
Ah damn, I'm really sorry, I pushed that up in a hurry and didn't read the errors properly. Let me revisit and get it right this time. |
Adding a note, that I think I'm seeing the same issue. However, I'll say I haven't investigated and it could be a different issue. My environment is Gitlab, using gitlab-runner as well as the Docker executor. Errors that I've seen:
and
Edit |
That's strange I got a similar error on gitlab CI (even though I don't get the same locally, even using the gitlab-runner): • Installing multidict (5.0.0)
Stack trace:
12 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:202 in _execute_operation
result = self._do_execute_operation(operation)
11 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:276 in _do_execute_operation
result = getattr(self, "_execute_{}".format(method))(operation)
10 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:411 in _execute_install
return self._install(operation)
9 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:437 in _install
archive = self._download(operation)
8 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:580 in _download
return self._download_link(operation, link)
7 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:589 in _download_link
archive = self._download_archive(operation, link)
6 /usr/local/lib/python3.8/site-packages/poetry/installation/executor.py:615 in _download_archive
response = self._authenticator.request(
5 /usr/local/lib/python3.8/site-packages/poetry/installation/authenticator.py:66 in request
settings = session.merge_environment_settings(
4 /usr/local/lib/python3.8/site-packages/requests/sessions.py:711 in merge_environment_settings
env_proxies = get_environ_proxies(url, no_proxy=no_proxy)
3 /usr/local/lib/python3.8/site-packages/requests/utils.py:775 in get_environ_proxies
return getproxies()
2 /usr/local/lib/python3.8/urllib/request.py:2502 in getproxies_environment
for name, value in os.environ.items():
1 /usr/local/lib/python3.8/_collections_abc.py:744 in __iter__
yield (key, self._mapping[key])
KeyError
'VIRTUAL_ENV'
at /usr/local/lib/python3.8/os.py:675 in __getitem__
671│ try:
672│ value = self._data[self.encodekey(key)]
673│ except KeyError:
674│ # raise KeyError with the original key value
→ 675│ raise KeyError(key) from None
676│ return self.decodevalue(value)
677│
678│ def __setitem__(self, key, value):
679│ key = self.encodekey(key) On the other hand, locally I have the environment variable defined: ❯ echo $VIRTUAL_ENV
/Users/cglacet/.pyenv/versions/3.7.7/envs/env-name The suggested fix did work for me too: poetry config experimental.new-installer false |
I see this issue from time to time on our gitlab ci (kubernetes runner). I works pretty much all the time after a retry (so same environment, same container, same git commit) |
Upstream issue: python-poetry/poetry#3199 Also bump Python version in CI to same as my local copy.
Any chance that somebody could take a look? It would be really nice to be able to use the new installer and get the speed improvement. |
Replace updates of os.environ with explcit passing of `env` to subprocess calls. Relates-to: python-poetry#3199
@abn Managed to reproduce the issue locally (with poetry 1.1.5), it's a bit hacky though. First, set a lot of env variables (10k will make your bash session very laggy): for var in {1..10000}
do
export v${var}=$var
done
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["RobinFrcd"]
[tool.poetry.dependencies]
python = "^3.7"
pendulum = "*"
boto3 = "*"
urllib3 = "*"
requests = "*"
certifi = "*"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
|
@RobinFrcd thanks for posting that. However, I am finding it rather hard to reproduce this (see below for what I tried). Is this consistent for you? And if so, could there be something else in the environment that I might need to change to reproduce this? podman run --rm -i --entrypoint bash python:3.7 <<EOF
for var in {1..10000}; do export v\${var}=\$var; done
set -xe
python -m pip install -q poetry
install -d foobar
pushd foobar
cat > pyproject.toml <<TOML
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["RobinFrcd"]
[tool.poetry.dependencies]
python = "^3.7"
pendulum = "*"
boto3 = "*"
urllib3 = "*"
requests = "*"
certifi = "*"
[tool.poetry.dev-dependencies]
pytest = "^5.2"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
TOML
poetry install
EOF Edit: Had to go to |
Good news is that I was able to verify that #3253 does indeed fix it. But would definitely like confirmation, can someone please try the above snippet but with the following installation? python -m pip install -q git+https://github.com/python-poetry/poetry.git@refs/pull/3253/head Alternatively install via pipx with a suffix. pipx install --suffix=@3253 'poetry @ git+https://github.com/python-poetry/poetry.git@refs/pull/3253/head' |
With "only" 10k env vars it was indeed not consistent at all. Had to increase the numbers to make it fail more often. So, I installed #3253 and two great news:
Thank you so much for the fix! 👍 |
Replace updates of os.environ with explcit passing of `env` to subprocess calls. Relates-to: #3199
Replace updates of os.environ with explcit passing of `env` to subprocess calls. Relates-to: python-poetry#3199
Replace updates of os.environ with explcit passing of `env` to subprocess calls. Relates-to: #3199
Yes, we are impacted as well and your fix does fix our CI in Gitlab... can't wait for release 1.1.6 to be available! Thank you @stephsamson ! |
Replace updates of os.environ with explicit passing of `env` to subprocess calls in `Env.execute()`. Relates-to: python-poetry#3199
Replace updates of os.environ with explicit passing of `env` to subprocess calls in `Env.execute()`. Relates-to: python-poetry#3199
Replace updates of os.environ with explicit passing of `env` to subprocess calls in `Env.execute()`. Relates-to: python-poetry#3199
Replace updates of os.environ with explicit passing of `env` to subprocess calls in `Env.execute()`. Relates-to: python-poetry#3199
Replace updates of os.environ with explicit passing of `env` to subprocess calls in `Env.execute()`. Relates-to: python-poetry#3199
GitHub Issue: python-poetry/poetry#3199
Trying to fix a failing job [1], will see if suggested fix helps. [1] python-poetry/poetry#3199
This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
-vvv
option).Issue
We run
poetry install --remove-untracked
and the process randomly fails on various "missing" environment variables. This has been reported in #3144 for thePATH
variable (which happens quite a lot, more than other variables), but I have seen it for many other variables (often GitLab or Docker related). In all cases they are defined.It fails really randomly. Different dependencies being installed, different environment variables. Sometimes it does not fail (but most often it does).
Sometimes it fails on multiple environment variables. Like
KeyError 'PATH'
,KeyError 'CI_JOB_STAGE'
orKeyError 'DOCKER_ENV_CI_DISPOSABLE_ENVIRONMENT'
in the same run. It seems to me like some kind of race condition in the parallel install. I can't prove this hypothesis until we can disable parallel installation. I think it's scheduled for an upcoming release.Here is an example output where it fails on the
PATH
variable.The text was updated successfully, but these errors were encountered: