Closed ghost closed 2 years ago
Can reproduce on windows and linux: poetry 1.2.0a1 generates a lock file that, when installed, sometimes, removes setuptools and makes some packages fail to install.
Does editing your pyproject.toml
to add "setuptools"
to the [build-system] requires
stop the error from occurring? I don't know if it's a fix or a workaround.
[build-system]
-requires = ["poetry_core>=1.0"]
+requires = ["setuptools", "poetry_core>=1.0"]
build-backend = "poetry.core.masonry.api"
The delta between 1.2.0
prerelease and 1.1.7
stable:
(that is going back to stable)
diff --git a/poetry.lock b/poetry.lock
index dc6b6820f..f0e8e3fdd 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -499,7 +499,6 @@
pickleshare = "*"
prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
pygments = "*"
-setuptools = ">=18.5"
traitlets = ">=4.2"
[package.extras]
@@ -1020,18 +1019,6 @@
-[[package]]
-name = "setuptools"
-version = "57.4.0"
-description = "Easily download, build, install, upgrade, and uninstall Python packages"
-category = "dev"
-optional = false
-python-versions = ">=3.6"
-
-[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "sphinx-inline-tabs", "sphinxcontrib-towncrier", "furo"]
-testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "mock", "flake8-2020", "virtualenv (>=13.0.0)", "pytest-virtualenv (>=1.2.7)", "wheel", "paver", "pip (>=19.1)", "jaraco.envs", "pytest-xdist", "sphinx", "jaraco.path (>=3.2.0)", "pytest-black (>=0.3.7)", "pytest-mypy"]
-
@@ -1082,7 +1069,6 @@
packaging = "*"
Pygments = ">=2.0"
requests = ">=2.0.0"
-setuptools = "*"
six = ">=1.5"
snowballstemmer = ">=1.1"
sphinxcontrib-websupport = "*"
@@ -1994,10 +1980,6 @@
-setuptools = [
- {file = "setuptools-57.4.0-py3-none-any.whl", hash = "sha256:a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6"},
- {file = "setuptools-57.4.0.tar.gz", hash = "sha256:6bac238ffdf24e8806c61440e755192470352850f3419a52f26ffe0a1a64f465"},
-]
six = [
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
In other words, 1.2.0
pre includes setuptools
into poetry.lock
while 1.1.7
does not.
I guess that 1.1.7
wants to build [package wheel? of a] dependency in a clean environment, and that's why it tries to [temporarily] remove setuptools
...
So the only issue here is that an older poetry cannot read a lock file generated by the newer version? If that is the case then I think this is expected behavior.
Breaking backwards compatibility in a minor release is not the best experience. Is there really no way to make any required changes in a way that it doesn't lead to mysterious breakage on earlier versions?
I don't think so. In this special case it was actually a bug fix (1.1 was broken in the sense that it did not properly record setuptools in the lockfile). There is really no good way that an old version could ever cope with that I think.
Does editing your
pyproject.toml
to add"setuptools"
to the[build-system] requires
stop the error from occurring? I don't know if it's a fix or a workaround.[build-system] -requires = ["poetry_core>=1.0"] +requires = ["setuptools", "poetry_core>=1.0"] build-backend = "poetry.core.masonry.api"
Sorry for the late reply about this. I think that fixed my issues before, but with 1.2.0 -> 1.1.x it does not fix the issue. But poetry add setuptools
seems to fix it. So I guess the workaround is either that, or not using Poetry 1.2.0 on my end until it's stable, and telling users to upgrade once it is. But it would be nice if there was a way to tell users that this project requires a specific version of Poetry rather than a scary error message. requires = ['poetry-core>=1.2.0']
does not seem to change anything,
The build-system.requires
part is something poetry itself does not use at the moment. This is used by the non-poetry PEP 517 frontends (eg: pip, build etc.)
See also #2789.
As to why setuptools appear in the lockfile, this is related to #2826. This change meant that it is no longer excluded from dependency resolution. This means if a dependency in your project's dependency tree requires setuptools it will be added to the lock file.
https://github.com/python-poetry/poetry/issues/3153#issuecomment-972796519
As you identify, since a project in your tree requires setuptools and that is not enabled for the platform, setuptools
get removed as it is not required.
Additionally, changes in #3835 should now mean that pip install
now adds --use-pep517
when building a depdency from an sdist.
I'd recommend you try using poetry from master
.
I'm on poetry 1.1.12 I've removed my poetry.lock and recreated it and I'm still facing the issue
For me having explicit dependency on setuptools
in normal dependencies
does not make a difference, it still removes it.
It completely breaks our Cython builds.
I have the same problem as well that trying to slowly write my poetry plugins, but this issue with incompatibility between 1.1 and 1.2 would not allow me to use 1.2 and plugins.
I've just bitten the bullet and tested 1.2.0b1 and wholly moved over to it - gambling a bit but half way house between the two isn't feasible any more. Especially with the --dev
becoming --group dev
and the subsequent trying to parse the group key in pyproject.toml
I am going to close this as it seems this will be resolved in 1.2 and is already on mater.
In case anyone are looking for a workaround to make a .lock
file generated with Poetry 1.2.x
compatible with Poetry 1.1.x
, I created a small gist to do so,
curl https://gist.githubusercontent.com/emilhe/0c7b1a33b2d02f17331242bf4fffd07c/raw/8da0665a58f469c980e7661d7f8c36f3bd3af992/strip_setuptools.py | python - && poetry install
In my case, I needed it because I am using Poetry 1.2.x
locally (I am having various issues with 1.1.x
), while my cloud provider supports only 1.1.x
.
In my case the issue is reproduced using poetry 1.2.0
. The new versions adds in poetry.lock
the following lines:
[package.dependencies]
setuptools = "*"
[[package]]
name = "setuptools"
version = "63.4.3"
description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "main"
optional = false
python-versions = ">=3.7"
Which when a another colleague (or our CI) runs poetry install
using poetry 1.1.14
fails as follows:
Installing typing-extensions (4.3.0)
..
EnvCommandError
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'error'
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
exit code: 1
╰─> [1 lines of output]
ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.
I still have this problem on 1.2.x
Having same or similar issue with Poetry (version 1.3.2) Anyone found a fix for this?
Command ['/home/visitor/afm/bin/python', '-m', 'pip', 'install', '--use-pep517', '--disable-pip-version-check', '--isolated', '--no-input', '--prefix', '/home/visitor/afm', '--no-deps', '/home/visitor/.cache/pypoetry/artifacts/dd/72/1c/1fb84326375a883f33f9419395a2175a0608c799d63478062ef3b3c7d8/future-0.18.3.tar.gz'] errored with the following return code 1, and output:
Processing /home/visitor/.cache/pypoetry/artifacts/dd/72/1c/1fb84326375a883f33f9419395a2175a0608c799d63478062ef3b3c7d8/future-0.18.3.tar.gz
Installing build dependencies: started
Installing build dependencies: still running...
Installing build dependencies: still running...
Installing build dependencies: still running...
Installing build dependencies: still running...
Installing build dependencies: still running...
Installing build dependencies: still running...
Installing build dependencies: finished with status 'error'
error: subprocess-exited-with-error
× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> [7 lines of output]
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fbfa837a2b0>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/setuptools/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fbfa837a5b0>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/setuptools/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fbfa837a7c0>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/setuptools/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fbfa837a8e0>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/setuptools/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7fbfa837aa60>, 'Connection to pypi.org timed out. (connect timeout=15)')': /simple/setuptools/
ERROR: Could not find a version that satisfies the requirement setuptools>=40.8.0 (from versions: none)
ERROR: No matching distribution found for setuptools>=40.8.0
[end of output]
And I'm also wondering why pip is trying to reach "pypi.org" although I've defined a private index...
poetry env info
Virtualenv
Python: 3.9.11
Implementation: CPython
Path: /home/visitor/afm
Executable: /home/visitor/afm/bin/python
Valid: True
/home/visitor/afm/bin/pip config -v list
For variant 'global', will try loading '/etc/xdg/pip/pip.conf'
For variant 'global', will try loading '/etc/pip.conf'
For variant 'user', will try loading '/home/visitor/.pip/pip.conf'
For variant 'user', will try loading '/home/visitor/.config/pip/pip.conf'
For variant 'site', will try loading '/home/visitor/afm/pip.conf'
global.index='http://my-private/repository/PyPI/'
global.index-url='http://my-private/repository/PyPI/simple/'
global.trusted-host='my-private'
I found the related topic: https://github.com/python-poetry/poetry/issues/3249 thanks
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
When running
poetry install
, Poetry tries to removesetuptools
, and then later complains that setuptools is not found when trying to installfuture
.I suspect this may be because
win10toast
depends on setuptools, but that package is skipped due to the platform not being Windows.To clarify: Running
poetry lock
from Poetry 1.2.0a1 seems to cause the lock file to include setuptools, which triggers the issue with Poetry <= 1.1.7. Runningpoetry lock
from Poetry 1.1.7 makes it exclude setuptools and there is no issue.Also, both lock files were generated on Linux. I have not tested on Windows yet.