Open stewartmiles opened 1 year ago
Oh I should mention the reason why we use build isolation is that we have a load of editable packages in our development venv, if we had each one installed in an isolated environment it quickly results in O(N-1^2) package installs.
A workaround is to pin setuptools to a specific version in Pipfile, then it's never upgraded but that isn't ideal as you have to remember to unpin and upgrade it periodically.
@stewartmiles Hmmm, this is a case where I would recommend created a prereq category for things like setuptools:
pipenv install setuptools --categories=prereq
and then install that category first so that its available for the subsequent build step, like pipenv sync --categories="prereq packages"
(i forget actually if its packages or default and I see our documentation around this could be improved).
It also reminds me for any folks thinking of participating in Hacktoberfest, it would be cool to be able to specify default catetgories in the pipenv directive so pipenv ran through the categories in that order when no flags were supplied (for convenience)
@matteius I'll have to give that a try. However, if categories work the same way as dev packages (i.e dev category?) then this isn't going to generally work AFAIK since historically pipenv would lock each category independently which can result in each category requiring different or, worse, incompatible versions of packages. To minimize the hacky would it make sense to parse the build requirements (i.e in pyproject.toml) of editable packages and ensure those are installed before installing the editable packages? I think that would work in the general case without pushing knowledge of the dependency graph onto the user.
default packages constraints do constrain all other categories, but that is about it, yeah they are otherwise locked independently.
would it make sense to parse the build requirements (i.e in pyproject.toml) of editable packages and ensure those are installed before installing the editable packages
Actually though requirementslib used to try and do such things, but I was happy to purge that code because in theory if the build environment is setup properly with the right install_requires
and not importing things it doesn't have installed yet, then it should be handled fine by pip.
I am actually surprised that you find needing to use no build isolation, because when pipenv install phase happens it uses --no-deps
which doesn't install any of the dependencies, and it installs everything in parallel. Are you sure that the no build isolation flag you are passing is actually performing better on the the newer pipenv versions?
Another thing to factor into it is the install phases, each phase technically you would think of as 1 pip install phase, but its actually up to 2 because hash checking I believe and certain features are for the whole install phase, so your editable installs are technically happening after the named installs in the same category. That is probably why adding setuptools actually doesn't need to be done in a prereq category can can be done in the same category as you mentioned.
Actually though requirementslib used to try and do such things, but I was happy to purge that code because in theory if the build environment is setup properly with the right install_requires and not importing things it doesn't have installed yet, then it should be handled fine by pip.
The bummer with this is that it makes things harder when developing with multiple packages in a single repository / venv. If one editable install has a build time dependency upon another, pip install --no-deps
fails. The workaround pipenv used to do or perhaps still does, is to run the sync process multiple times before failing out, each pass would install a separate layer of the build dependency tree. Unfortunately, if I remember correctly it only retried 3 times rather than continuing to retry if new packages are installed which means you can only have 3 levels of build time dependencies.
I am actually surprised that you find needing to use no build isolation, because when pipenv install phase happens it uses --no-deps which doesn't install any of the dependencies, and it installs everything in parallel. Are you sure that the no build isolation flag you are passing is actually performing better on the the newer pipenv versions?
Yeah as we have pretty sizeable build time dependencies in pyproject.toml
which end being installed over and again for each isolated build.
If one editable install has a build time dependency upon another, pip install --no-deps fails.
That is where named package categories can be useful, because you can stage your build dependencies which it feels like could be worth investing in defining that in the Pipfile via categories for complicated setups where the isolation causes a big increase in install time and cycles.
The workaround pipenv used to do or perhaps still does, is to run the sync process multiple times before failing out, each pass would install a separate layer of the build dependency tree. Unfortunately, if I remember correctly it only retried 3 times rather than continuing to retry if new packages are installed which means you can only have 3 levels of build time dependencies.
Actually I think it only retired once, so the initial plus one retry, but that has since been removed -- I didn't realize anyone was relying on it as a side effect of this type of issue, but the reason it got removed is it was altering between a pep517 (??) flag or not, but as I recall in almost all cases a package that failed in the first iteration would fail again in the second. As you mention the number of iterations could have to be n where n is the number of packages that have build time dependencies.
Sorry that I don't have a magi bullet suggestion on it other than named categories and having a preferred ordering. My preference is to not go back to days of trying to maintain parse setup.py/pyproject.toml/setup.cfg ahead of the pip install, because pip is designed to handle these cases as well. It just felt like a lot of things in requirementslib were stale and broken and duplicating things pip does.
Another thing to note is the old pipenv (the ones with the progress bar) they basically did a sequential install where each dependency was installed not in parallel, in order to track progress, and some sometimes people would get lucky because the ordering the install happened in happened to include build dependencies before other ones, but it wasn't bullet proof.
Last comment for now though would be around setuptools -- you mentioned pinning the version and having to periodically update it -- why not just pin to star unless you know of a restriction keeping you on an old version? This way it gets updated automatically during lock cycles?
Ok most recent thing I discovered that is an issue with todays release is: https://github.com/pypa/pipenv/pull/5926
Not sure if it impacts what you were seeing at all, but I bring it up because you mentioned clobbering setuptools.
Worth checking with https://pypi.org/project/pipenv/2023.9.8/
Sorry that I don't have a magi bullet suggestion on it other than named categories and having a preferred ordering. My preference is to not go back to days of trying to maintain parse setup.py/pyproject.toml/setup.cfg ahead of the pip install, because pip is designed to handle these cases as well. It just felt like a lot of things in requirementslib were stale and broken and duplicating things pip does.
Yeah I feel that. I've dug around in that code a bit and it's great to stop depending upon it. It sounds like supporting build time dependencies of editable wheels isn't a thing pipenv would like to do then? Right now we have a load of code that uses pipenv --graph
(i.e deptree) to generate a graph of dependencies after everything is installed and it parses pyproject.toml for build-time dependencies so that we have an install requirements graph and build requirements graph, everything gets installed via the build requirements graph in parallel as much as possible. Everything is checked against the install requirements graph to ensure everything has install time requirements at the end of the sync. I would love to ditch all this crazyiness in favor of just pipenv sync
but it sounds like that isn't on the agenda, I'm sure you all have plenty of other fish to fry to get things stable and reduce the vendored forks etc.
Another thing to note is the old pipenv (the ones with the progress bar) they basically did a sequential install where each dependency was installed not in parallel, in order to track progress, and some sometimes people would get lucky because the ordering the install happened in happened to include build dependencies before other ones, but it wasn't bullet proof.
Yeah that was likely helping as the sequential install would avoid the issue in this bug as setuptools would be installed / upgraded then packages that depend upon it at build time could use without the rug being pulled out from under them.
Last comment for now though would be around setuptools -- you mentioned pinning the version and having to periodically update it -- why not just pin to star unless you know of a restriction keeping you on an old version? This way it gets updated automatically during lock cycles?
With a fresh mind (it's the start of my day), I think that would end up with the same issue when initially syncing it. i.e:
pipenv --python $(which python) # creates venv with older setuptools bundled with pipenv
pipenv sync # updates setuptools and packages that depend upon it in parallel which causes
# things to blow up.
I think the only way to get pipenv sync
to work in this case is to do one of the following:
pip wheel
and maintain a private repository. This is seriously sucky from a developer workflow point of view IMHO.pipenv sync --sequential
, it would be slow but it would avoid this issue, what do you think?Ok most recent thing I discovered that is an issue with todays release is: https://github.com/pypa/pipenv/pull/5926
I had a read through it but I don't think that helps for this issue.
@stewartmiles might be worth trying todays release just in case there was an issue resolving the specific build requirement/dependency, since ignore_compatibility was defaulted to True in yesterdays release. That being said ...
It sounds like supporting build time dependencies of editable wheels isn't a thing pipenv would like to do then?
I guess I don't have a solid answer on this, my initial take was we are supporting it via pip's level of support. The requirementslib code that maybe did that was also maybe not being invoked, because there was a lot of cruft code from the time that pipenv's resolver lived in requirementslib. Maybe one day I can pick apart more if it was truly doing something helpful with regards to build time dependencies, but ideally I would need to know what the last version of pipenv it did work properly on -- its possible we could be looking up the wrong tree.
- As you describe, use categories and basically install setuptools and build dependencies manually first followed by packages that require setuptools at build time.
- Pin setuptools to the version bundled with pipenv and manually update this on each pipenv upgrade.
If point two solves it, then are there really other build dependencies to put in a separate package group besides setuptools (pt 1). I think the advantage of having a separate group, is that while named requirements get installed before editable, you would guarantee setuptools is the same for even named requirements ahead of invoking the default group install.
Ditch using packages that need to be built (e.g editable packages) and instead build them using pip wheel and maintain a private repository. This is seriously sucky from a developer workflow point of view IMHO.
Understood.
Bring back pipenv sync --sequential, it would be slow but it would avoid this issue, what do you think?
I am not convinced on this simply because there was never a way to specify the ordering of the sequential install, so I feel its a can of worms to try and support it.
I'll look more at your reproduction example when I have more time and see if there is another angle to consider.
Oh FYI I tried disabling build isolation this morning and wow it's slow with a lot of packages so it's definitely still no good for us.
Again in my hacky repo https://github.com/stewartmiles/pipenv_editable_install_repro , I've added requires-setuptools/install_multiple.sh
. It's possible to configure the number of packages using the INSTALL_PACKAGES
variable which defaults to 50.
e.g:
INSTALL_PACKAGES=25 time ./requires-setuptools/install_multiple.sh
dumps out a heap of logs with the final time on a hefty 24 core box with fast SSD this takes 1 minute and 24 seconds. All generated packages depend upon the same things so really the resolver shouldn't be doing much work. Out of mild curiosity I fired up top
to monitor it and the CPU was doing very little.
@stewartmiles It appears to only be an issue with using --skip-lock
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requires-setuptools1 = {file = "requires-setuptools1", editable = true}
requires-setuptools2 = {file = "requires-setuptools2", editable = true}
requires-setuptools3 = {file = "requires-setuptools3", editable = true}
requires-setuptools4 = {file = "requires-setuptools4", editable = true}
requires-setuptools5 = {file = "requires-setuptools5", editable = true}
requires-setuptools6 = {file = "requires-setuptools6", editable = true}
requires-setuptools7 = {file = "requires-setuptools7", editable = true}
requires-setuptools8 = {file = "requires-setuptools8", editable = true}
requires-setuptools9 = {file = "requires-setuptools9", editable = true}
requires-setuptools10 = {file = "requires-setuptools10", editable = true}
requires-setuptools11 = {file = "requires-setuptools11", editable = true}
requires-setuptools12 = {file = "requires-setuptools12", editable = true}
requires-setuptools13 = {file = "requires-setuptools13", editable = true}
requires-setuptools14 = {file = "requires-setuptools14", editable = true}
requires-setuptools15 = {file = "requires-setuptools15", editable = true}
requires-setuptools16 = {file = "requires-setuptools16", editable = true}
requires-setuptools17 = {file = "requires-setuptools17", editable = true}
requires-setuptools18 = {file = "requires-setuptools18", editable = true}
requires-setuptools19 = {file = "requires-setuptools19", editable = true}
requires-setuptools20 = {file = "requires-setuptools20", editable = true}
requires-setuptools21 = {file = "requires-setuptools21", editable = true}
requires-setuptools22 = {file = "requires-setuptools22", editable = true}
requires-setuptools23 = {file = "requires-setuptools23", editable = true}
requires-setuptools24 = {file = "requires-setuptools24", editable = true}
requires-setuptools25 = {file = "requires-setuptools25", editable = true}
requires-setuptools26 = {file = "requires-setuptools26", editable = true}
requires-setuptools27 = {file = "requires-setuptools27", editable = true}
requires-setuptools28 = {file = "requires-setuptools28", editable = true}
requires-setuptools29 = {file = "requires-setuptools29", editable = true}
requires-setuptools30 = {file = "requires-setuptools30", editable = true}
requires-setuptools31 = {file = "requires-setuptools31", editable = true}
requires-setuptools32 = {file = "requires-setuptools32", editable = true}
requires-setuptools33 = {file = "requires-setuptools33", editable = true}
requires-setuptools34 = {file = "requires-setuptools34", editable = true}
requires-setuptools35 = {file = "requires-setuptools35", editable = true}
requires-setuptools36 = {file = "requires-setuptools36", editable = true}
requires-setuptools37 = {file = "requires-setuptools37", editable = true}
requires-setuptools38 = {file = "requires-setuptools38", editable = true}
requires-setuptools39 = {file = "requires-setuptools39", editable = true}
requires-setuptools40 = {file = "requires-setuptools40", editable = true}
requires-setuptools41 = {file = "requires-setuptools41", editable = true}
requires-setuptools42 = {file = "requires-setuptools42", editable = true}
requires-setuptools43 = {file = "requires-setuptools43", editable = true}
requires-setuptools44 = {file = "requires-setuptools44", editable = true}
requires-setuptools45 = {file = "requires-setuptools45", editable = true}
requires-setuptools46 = {file = "requires-setuptools46", editable = true}
requires-setuptools47 = {file = "requires-setuptools47", editable = true}
requires-setuptools48 = {file = "requires-setuptools48", editable = true}
requires-setuptools49 = {file = "requires-setuptools49", editable = true}
requires-setuptools50 = {file = "requires-setuptools50", editable = true}
[dev-packages]
[requires]
python_version = "3.10"
python_full_version = "3.10.12"
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat Pipfile.lock
{
"_meta": {
"hash": {
"sha256": "7a3625721f1d53e1cec0190bcf5e0f6e71096be95fe6deddecf8d17bf2edc405"
},
"pipfile-spec": 6,
"requires": {
"python_full_version": "3.10.12",
"python_version": "3.10"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"requires-setuptools1": {
"editable": true,
"file": "requires-setuptools1"
},
"requires-setuptools10": {
"editable": true,
"file": "requires-setuptools10"
},
"requires-setuptools11": {
"editable": true,
"file": "requires-setuptools11"
},
"requires-setuptools12": {
"editable": true,
"file": "requires-setuptools12"
},
"requires-setuptools13": {
"editable": true,
"file": "requires-setuptools13"
},
"requires-setuptools14": {
"editable": true,
"file": "requires-setuptools14"
},
"requires-setuptools15": {
"editable": true,
"file": "requires-setuptools15"
},
"requires-setuptools16": {
"editable": true,
"file": "requires-setuptools16"
},
"requires-setuptools17": {
"editable": true,
"file": "requires-setuptools17"
},
"requires-setuptools18": {
"editable": true,
"file": "requires-setuptools18"
},
"requires-setuptools19": {
"editable": true,
"file": "requires-setuptools19"
},
"requires-setuptools2": {
"editable": true,
"file": "requires-setuptools2"
},
"requires-setuptools20": {
"editable": true,
"file": "requires-setuptools20"
},
"requires-setuptools21": {
"editable": true,
"file": "requires-setuptools21"
},
"requires-setuptools22": {
"editable": true,
"file": "requires-setuptools22"
},
"requires-setuptools23": {
"editable": true,
"file": "requires-setuptools23"
},
"requires-setuptools24": {
"editable": true,
"file": "requires-setuptools24"
},
"requires-setuptools25": {
"editable": true,
"file": "requires-setuptools25"
},
"requires-setuptools26": {
"editable": true,
"file": "requires-setuptools26"
},
"requires-setuptools27": {
"editable": true,
"file": "requires-setuptools27"
},
"requires-setuptools28": {
"editable": true,
"file": "requires-setuptools28"
},
"requires-setuptools29": {
"editable": true,
"file": "requires-setuptools29"
},
"requires-setuptools3": {
"editable": true,
"file": "requires-setuptools3"
},
"requires-setuptools30": {
"editable": true,
"file": "requires-setuptools30"
},
"requires-setuptools31": {
"editable": true,
"file": "requires-setuptools31"
},
"requires-setuptools32": {
"editable": true,
"file": "requires-setuptools32"
},
"requires-setuptools33": {
"editable": true,
"file": "requires-setuptools33"
},
"requires-setuptools34": {
"editable": true,
"file": "requires-setuptools34"
},
"requires-setuptools35": {
"editable": true,
"file": "requires-setuptools35"
},
"requires-setuptools36": {
"editable": true,
"file": "requires-setuptools36"
},
"requires-setuptools37": {
"editable": true,
"file": "requires-setuptools37"
},
"requires-setuptools38": {
"editable": true,
"file": "requires-setuptools38"
},
"requires-setuptools39": {
"editable": true,
"file": "requires-setuptools39"
},
"requires-setuptools4": {
"editable": true,
"file": "requires-setuptools4"
},
"requires-setuptools40": {
"editable": true,
"file": "requires-setuptools40"
},
"requires-setuptools41": {
"editable": true,
"file": "requires-setuptools41"
},
"requires-setuptools42": {
"editable": true,
"file": "requires-setuptools42"
},
"requires-setuptools43": {
"editable": true,
"file": "requires-setuptools43"
},
"requires-setuptools44": {
"editable": true,
"file": "requires-setuptools44"
},
"requires-setuptools45": {
"editable": true,
"file": "requires-setuptools45"
},
"requires-setuptools46": {
"editable": true,
"file": "requires-setuptools46"
},
"requires-setuptools47": {
"editable": true,
"file": "requires-setuptools47"
},
"requires-setuptools48": {
"editable": true,
"file": "requires-setuptools48"
},
"requires-setuptools49": {
"editable": true,
"file": "requires-setuptools49"
},
"requires-setuptools5": {
"editable": true,
"file": "requires-setuptools5"
},
"requires-setuptools50": {
"editable": true,
"file": "requires-setuptools50"
},
"requires-setuptools6": {
"editable": true,
"file": "requires-setuptools6"
},
"requires-setuptools7": {
"editable": true,
"file": "requires-setuptools7"
},
"requires-setuptools8": {
"editable": true,
"file": "requires-setuptools8"
},
"requires-setuptools9": {
"editable": true,
"file": "requires-setuptools9"
},
"setuptools": {
"hashes": [
"sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48",
"sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"
],
"markers": "python_version >= '3.8'",
"version": "==68.2.0"
}
},
"develop": {}
}
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv sync
Installing dependencies from Pipfile.lock (edc405)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!
Worth noting too that I had to modify install.sh by moving it up a directory and commenting out the cd line, because it was getting into a circular import otherwise.
I think the difference is --skip-lock
without the Pipfile specifier for setuptools, doesn't actually know that setuptools is required yet so it enters the install phase directly into the editable install and without build isolation each project is concurrently installing/removing setuptools as needed which results in the parallel build failures. However in your example, operating off the lock file, the lock file picks up the fact setuptools is required without adding it to the Pipfile, and because its in the lock, that gets installed as a named requirement first and is available to all the editable installs.
In other words, I don't think pipenv is going to support well the use of: skip-lock with no build isolation, and not pre-supplying build dependencies. Can you remind me again why you are using --skip-lock
?
I just figured something out -- if you want to use --skip-lock
try adding to your script: export PIP_CHECK_BUILD_DEPENDENCIES=1;
which "Check the build dependencies when PEP517 is used." and remove the lock/sync steps as the sync doesn't appear to work when skip lock env var is set. Alternatively, without skip-lock also works (important to not set the same env var that works with skip-lock)
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat install.sh
#!/bin/bash -eu
# Flip PIP_NO_BUILD_ISOLATION to 1 fix the installation with pipenv 2023.9.7
export PIP_NO_BUILD_ISOLATION=0;
export PIP_CHECK_BUILD_DEPENDENCIES=1;
export PIPENV_SKIP_LOCK=true;
export PIPENV_VENV_IN_PROJECT=true;
#cd "$(cd "$(dirname "${0}")"; pwd)/.."
#git clean -dfx
pipenv --python "$(command -v python)"
declare -a pipenv_install_args=()
for i in $(seq 1 50); do
package_name=requires-setuptools$((i))
cp -r ./requires-setuptools "./${package_name}"
sed -i "s/requires-setuptools/${package_name}/g" \
"./${package_name}/setup.py"
pipenv_install_args+=('-e' "./${package_name}")
done
set -x
export PIP_LOG_FILE=/dev/stdout
pipenv install "${pipenv_install_args[@]}"
#pipenv lock
#pipenv sync
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv --rm
No virtualenv has been created for this project yet!
Aborted!
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ vim install.sh
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ ./install.sh
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv_editable_install_repro/Pipfile
Using /usr/bin/python (3.10.12) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 188ms
creator CPython3Posix(dest=/home/matteius/pipenv_editable_install_repro/.venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
added seed packages: pip==23.2.1, setuptools==68.0.0, wheel==0.41.2
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/pipenv_editable_install_repro/.venv
+ export PIP_LOG_FILE=/dev/stdout
+ PIP_LOG_FILE=/dev/stdout
+ pipenv install -e ./requires-setuptools1 -e ./requires-setuptools2 -e ./requires-setuptools3 -e ./requires-setuptools4 -e ./requires-setuptools5 -e ./requires-setuptools6 -e ./requires-setuptools7 -e ./requires-setuptools8 -e ./requires-setuptools9 -e ./requires-setuptools10 -e ./requires-setuptools11 -e ./requires-setuptools12 -e ./requires-setuptools13 -e ./requires-setuptools14 -e ./requires-setuptools15 -e ./requires-setuptools16 -e ./requires-setuptools17 -e ./requires-setuptools18 -e ./requires-setuptools19 -e ./requires-setuptools20 -e ./requires-setuptools21 -e ./requires-setuptools22 -e ./requires-setuptools23 -e ./requires-setuptools24 -e ./requires-setuptools25 -e ./requires-setuptools26 -e ./requires-setuptools27 -e ./requires-setuptools28 -e ./requires-setuptools29 -e ./requires-setuptools30 -e ./requires-setuptools31 -e ./requires-setuptools32 -e ./requires-setuptools33 -e ./requires-setuptools34 -e ./requires-setuptools35 -e ./requires-setuptools36 -e ./requires-setuptools37 -e ./requires-setuptools38 -e ./requires-setuptools39 -e ./requires-setuptools40 -e ./requires-setuptools41 -e ./requires-setuptools42 -e ./requires-setuptools43 -e ./requires-setuptools44 -e ./requires-setuptools45 -e ./requires-setuptools46 -e ./requires-setuptools47 -e ./requires-setuptools48 -e ./requires-setuptools49 -e ./requires-setuptools50
The flag --skip-lock has been reintroduced (but is not recommended). Without the lock resolver it is difficult to manage multiple package indexes, and hash checking is not provided. However it can help
manage installs with current deficiencies in locking across platforms.
Installing -e ./requires-setuptools1...
Resolving -e ./requires-setuptools1...
✔ Installation Succeeded
Installing -e ./requires-setuptools2...
Resolving -e ./requires-setuptools2...
✔ Installation Succeeded
Installing -e ./requires-setuptools3...
Resolving -e ./requires-setuptools3...
✔ Installation Succeeded
Installing -e ./requires-setuptools4...
Resolving -e ./requires-setuptools4...
✔ Installation Succeeded
Installing -e ./requires-setuptools5...
Resolving -e ./requires-setuptools5...
✔ Installation Succeeded
Installing -e ./requires-setuptools6...
Resolving -e ./requires-setuptools6...
✔ Installation Succeeded
Installing -e ./requires-setuptools7...
Resolving -e ./requires-setuptools7...
✔ Installation Succeeded
Installing -e ./requires-setuptools8...
Resolving -e ./requires-setuptools8...
✔ Installation Succeeded
Installing -e ./requires-setuptools9...
Resolving -e ./requires-setuptools9...
✔ Installation Succeeded
Installing -e ./requires-setuptools10...
Resolving -e ./requires-setuptools10...
✔ Installation Succeeded
Installing -e ./requires-setuptools11...
Resolving -e ./requires-setuptools11...
✔ Installation Succeeded
Installing -e ./requires-setuptools12...
Resolving -e ./requires-setuptools12...
✔ Installation Succeeded
Installing -e ./requires-setuptools13...
Resolving -e ./requires-setuptools13...
✔ Installation Succeeded
Installing -e ./requires-setuptools14...
Resolving -e ./requires-setuptools14...
✔ Installation Succeeded
Installing -e ./requires-setuptools15...
Resolving -e ./requires-setuptools15...
✔ Installation Succeeded
Installing -e ./requires-setuptools16...
Resolving -e ./requires-setuptools16...
✔ Installation Succeeded
Installing -e ./requires-setuptools17...
Resolving -e ./requires-setuptools17...
✔ Installation Succeeded
Installing -e ./requires-setuptools18...
Resolving -e ./requires-setuptools18...
✔ Installation Succeeded
Installing -e ./requires-setuptools19...
Resolving -e ./requires-setuptools19...
✔ Installation Succeeded
Installing -e ./requires-setuptools20...
Resolving -e ./requires-setuptools20...
✔ Installation Succeeded
Installing -e ./requires-setuptools21...
Resolving -e ./requires-setuptools21...
✔ Installation Succeeded
Installing -e ./requires-setuptools22...
Resolving -e ./requires-setuptools22...
✔ Installation Succeeded
Installing -e ./requires-setuptools23...
Resolving -e ./requires-setuptools23...
✔ Installation Succeeded
Installing -e ./requires-setuptools24...
Resolving -e ./requires-setuptools24...
✔ Installation Succeeded
Installing -e ./requires-setuptools25...
Resolving -e ./requires-setuptools25...
✔ Installation Succeeded
Installing -e ./requires-setuptools26...
Resolving -e ./requires-setuptools26...
✔ Installation Succeeded
Installing -e ./requires-setuptools27...
Resolving -e ./requires-setuptools27...
✔ Installation Succeeded
Installing -e ./requires-setuptools28...
Resolving -e ./requires-setuptools28...
✔ Installation Succeeded
Installing -e ./requires-setuptools29...
Resolving -e ./requires-setuptools29...
✔ Installation Succeeded
Installing -e ./requires-setuptools30...
Resolving -e ./requires-setuptools30...
✔ Installation Succeeded
Installing -e ./requires-setuptools31...
Resolving -e ./requires-setuptools31...
✔ Installation Succeeded
Installing -e ./requires-setuptools32...
Resolving -e ./requires-setuptools32...
✔ Installation Succeeded
Installing -e ./requires-setuptools33...
Resolving -e ./requires-setuptools33...
✔ Installation Succeeded
Installing -e ./requires-setuptools34...
Resolving -e ./requires-setuptools34...
✔ Installation Succeeded
Installing -e ./requires-setuptools35...
Resolving -e ./requires-setuptools35...
✔ Installation Succeeded
Installing -e ./requires-setuptools36...
Resolving -e ./requires-setuptools36...
✔ Installation Succeeded
Installing -e ./requires-setuptools37...
Resolving -e ./requires-setuptools37...
✔ Installation Succeeded
Installing -e ./requires-setuptools38...
Resolving -e ./requires-setuptools38...
✔ Installation Succeeded
Installing -e ./requires-setuptools39...
Resolving -e ./requires-setuptools39...
✔ Installation Succeeded
Installing -e ./requires-setuptools40...
Resolving -e ./requires-setuptools40...
✔ Installation Succeeded
Installing -e ./requires-setuptools41...
Resolving -e ./requires-setuptools41...
✔ Installation Succeeded
Installing -e ./requires-setuptools42...
Resolving -e ./requires-setuptools42...
✔ Installation Succeeded
Installing -e ./requires-setuptools43...
Resolving -e ./requires-setuptools43...
✔ Installation Succeeded
Installing -e ./requires-setuptools44...
Resolving -e ./requires-setuptools44...
✔ Installation Succeeded
Installing -e ./requires-setuptools45...
Resolving -e ./requires-setuptools45...
✔ Installation Succeeded
Installing -e ./requires-setuptools46...
Resolving -e ./requires-setuptools46...
✔ Installation Succeeded
Installing -e ./requires-setuptools47...
Resolving -e ./requires-setuptools47...
✔ Installation Succeeded
Installing -e ./requires-setuptools48...
Resolving -e ./requires-setuptools48...
✔ Installation Succeeded
Installing -e ./requires-setuptools49...
Resolving -e ./requires-setuptools49...
✔ Installation Succeeded
Installing -e ./requires-setuptools50...
Resolving -e ./requires-setuptools50...
✔ Installation Succeeded
Installing dependencies from Pipfile...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv run pip freeze
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools1&subdirectory=requires-setuptools1
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools10&subdirectory=requires-setuptools10
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools11&subdirectory=requires-setuptools11
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools12&subdirectory=requires-setuptools12
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools13&subdirectory=requires-setuptools13
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools14&subdirectory=requires-setuptools14
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools15&subdirectory=requires-setuptools15
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools16&subdirectory=requires-setuptools16
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools17&subdirectory=requires-setuptools17
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools18&subdirectory=requires-setuptools18
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools19&subdirectory=requires-setuptools19
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools2&subdirectory=requires-setuptools2
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools20&subdirectory=requires-setuptools20
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools21&subdirectory=requires-setuptools21
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools22&subdirectory=requires-setuptools22
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools23&subdirectory=requires-setuptools23
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools24&subdirectory=requires-setuptools24
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools25&subdirectory=requires-setuptools25
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools26&subdirectory=requires-setuptools26
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools27&subdirectory=requires-setuptools27
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools28&subdirectory=requires-setuptools28
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools29&subdirectory=requires-setuptools29
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools3&subdirectory=requires-setuptools3
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools30&subdirectory=requires-setuptools30
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools31&subdirectory=requires-setuptools31
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools32&subdirectory=requires-setuptools32
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools33&subdirectory=requires-setuptools33
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools34&subdirectory=requires-setuptools34
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools35&subdirectory=requires-setuptools35
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools36&subdirectory=requires-setuptools36
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools37&subdirectory=requires-setuptools37
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools38&subdirectory=requires-setuptools38
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools39&subdirectory=requires-setuptools39
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools4&subdirectory=requires-setuptools4
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools40&subdirectory=requires-setuptools40
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools41&subdirectory=requires-setuptools41
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools42&subdirectory=requires-setuptools42
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools43&subdirectory=requires-setuptools43
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools44&subdirectory=requires-setuptools44
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools45&subdirectory=requires-setuptools45
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools46&subdirectory=requires-setuptools46
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools47&subdirectory=requires-setuptools47
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools48&subdirectory=requires-setuptools48
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools49&subdirectory=requires-setuptools49
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools5&subdirectory=requires-setuptools5
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools50&subdirectory=requires-setuptools50
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools6&subdirectory=requires-setuptools6
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools7&subdirectory=requires-setuptools7
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools8&subdirectory=requires-setuptools8
-e git+https://github.com/stewartmiles/pipenv_editable_install_repro@d4c7374b801694eec7b351723732ce996a5d4112#egg=requires_setuptools9&subdirectory=requires-setuptools9
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv --rm
Removing virtualenv (/home/matteius/pipenv_editable_install_repro/.venv)...
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ vim Pipfile
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ rm Pipfile*
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ vim install.sh
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv ^C
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ ls
applications requires-setuptools12 requires-setuptools19 requires-setuptools25 requires-setuptools31 requires-setuptools38 requires-setuptools44 requires-setuptools50
install.sh requires-setuptools13 requires-setuptools2 requires-setuptools26 requires-setuptools32 requires-setuptools39 requires-setuptools45 requires-setuptools6
LICENSE requires-setuptools14 requires-setuptools20 requires-setuptools27 requires-setuptools33 requires-setuptools4 requires-setuptools46 requires-setuptools7
requires-setuptools requires-setuptools15 requires-setuptools21 requires-setuptools28 requires-setuptools34 requires-setuptools40 requires-setuptools47 requires-setuptools8
requires-setuptools1 requires-setuptools16 requires-setuptools22 requires-setuptools29 requires-setuptools35 requires-setuptools41 requires-setuptools48 requires-setuptools9
requires-setuptools10 requires-setuptools17 requires-setuptools23 requires-setuptools3 requires-setuptools36 requires-setuptools42 requires-setuptools49 test-hello
requires-setuptools11 requires-setuptools18 requires-setuptools24 requires-setuptools30 requires-setuptools37 requires-setuptools43 requires-setuptools5 try_pipenv_versions.sh
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat install.sh
#!/bin/bash -eu
# Flip PIP_NO_BUILD_ISOLATION to 1 fix the installation with pipenv 2023.9.7
export PIP_NO_BUILD_ISOLATION=0;
#export PIP_CHECK_BUILD_DEPENDENCIES=1;
export PIPENV_VENV_IN_PROJECT=true;
#cd "$(cd "$(dirname "${0}")"; pwd)/.."
#git clean -dfx
pipenv --python "$(command -v python)"
declare -a pipenv_install_args=()
for i in $(seq 1 50); do
package_name=requires-setuptools$((i))
cp -r ./requires-setuptools "./${package_name}"
sed -i "s/requires-setuptools/${package_name}/g" \
"./${package_name}/setup.py"
pipenv_install_args+=('-e' "./${package_name}")
done
set -x
export PIP_LOG_FILE=/dev/stdout
pipenv install "${pipenv_install_args[@]}"
pipenv lock
pipenv sync
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ ./install.sh
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv_editable_install_repro/Pipfile
Using /usr/bin/python (3.10.12) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 223ms
creator CPython3Posix(dest=/home/matteius/pipenv_editable_install_repro/.venv, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
added seed packages: pip==23.2.1, setuptools==68.0.0, wheel==0.41.2
activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/pipenv_editable_install_repro/.venv
Creating a Pipfile for this project...
+ export PIP_LOG_FILE=/dev/stdout
+ PIP_LOG_FILE=/dev/stdout
+ pipenv install -e ./requires-setuptools1 -e ./requires-setuptools2 -e ./requires-setuptools3 -e ./requires-setuptools4 -e ./requires-setuptools5 -e ./requires-setuptools6 -e ./requires-setuptools7 -e ./requires-setuptools8 -e ./requires-setuptools9 -e ./requires-setuptools10 -e ./requires-setuptools11 -e ./requires-setuptools12 -e ./requires-setuptools13 -e ./requires-setuptools14 -e ./requires-setuptools15 -e ./requires-setuptools16 -e ./requires-setuptools17 -e ./requires-setuptools18 -e ./requires-setuptools19 -e ./requires-setuptools20 -e ./requires-setuptools21 -e ./requires-setuptools22 -e ./requires-setuptools23 -e ./requires-setuptools24 -e ./requires-setuptools25 -e ./requires-setuptools26 -e ./requires-setuptools27 -e ./requires-setuptools28 -e ./requires-setuptools29 -e ./requires-setuptools30 -e ./requires-setuptools31 -e ./requires-setuptools32 -e ./requires-setuptools33 -e ./requires-setuptools34 -e ./requires-setuptools35 -e ./requires-setuptools36 -e ./requires-setuptools37 -e ./requires-setuptools38 -e ./requires-setuptools39 -e ./requires-setuptools40 -e ./requires-setuptools41 -e ./requires-setuptools42 -e ./requires-setuptools43 -e ./requires-setuptools44 -e ./requires-setuptools45 -e ./requires-setuptools46 -e ./requires-setuptools47 -e ./requires-setuptools48 -e ./requires-setuptools49 -e ./requires-setuptools50
Installing -e ./requires-setuptools1...
Resolving -e ./requires-setuptools1...
Added requires-setuptools11 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools2...
Resolving -e ./requires-setuptools2...
Added requires-setuptools22 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools3...
Resolving -e ./requires-setuptools3...
Added requires-setuptools33 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools4...
Resolving -e ./requires-setuptools4...
Added requires-setuptools44 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools5...
Resolving -e ./requires-setuptools5...
Added requires-setuptools55 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools6...
Resolving -e ./requires-setuptools6...
Added requires-setuptools66 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools7...
Resolving -e ./requires-setuptools7...
Added requires-setuptools77 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools8...
Resolving -e ./requires-setuptools8...
Added requires-setuptools88 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools9...
Resolving -e ./requires-setuptools9...
Added requires-setuptools99 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools10...
Resolving -e ./requires-setuptools10...
Added requires-setuptools1010 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools11...
Resolving -e ./requires-setuptools11...
Added requires-setuptools1111 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools12...
Resolving -e ./requires-setuptools12...
Added requires-setuptools1212 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools13...
Resolving -e ./requires-setuptools13...
Added requires-setuptools1313 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools14...
Resolving -e ./requires-setuptools14...
Added requires-setuptools1414 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools15...
Resolving -e ./requires-setuptools15...
Added requires-setuptools1515 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools16...
Resolving -e ./requires-setuptools16...
Added requires-setuptools1616 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools17...
Resolving -e ./requires-setuptools17...
Added requires-setuptools1717 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools18...
Resolving -e ./requires-setuptools18...
Added requires-setuptools1818 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools19...
Resolving -e ./requires-setuptools19...
Added requires-setuptools1919 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools20...
Resolving -e ./requires-setuptools20...
Added requires-setuptools2020 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools21...
Resolving -e ./requires-setuptools21...
Added requires-setuptools2121 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools22...
Resolving -e ./requires-setuptools22...
Added requires-setuptools2222 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools23...
Resolving -e ./requires-setuptools23...
Added requires-setuptools2323 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools24...
Resolving -e ./requires-setuptools24...
Added requires-setuptools2424 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools25...
Resolving -e ./requires-setuptools25...
Added requires-setuptools2525 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools26...
Resolving -e ./requires-setuptools26...
Added requires-setuptools2626 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools27...
Resolving -e ./requires-setuptools27...
Added requires-setuptools2727 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools28...
Resolving -e ./requires-setuptools28...
Added requires-setuptools2828 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools29...
Resolving -e ./requires-setuptools29...
Added requires-setuptools2929 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools30...
Resolving -e ./requires-setuptools30...
Added requires-setuptools3030 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools31...
Resolving -e ./requires-setuptools31...
Added requires-setuptools3131 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools32...
Resolving -e ./requires-setuptools32...
Added requires-setuptools3232 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools33...
Resolving -e ./requires-setuptools33...
Added requires-setuptools3333 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools34...
Resolving -e ./requires-setuptools34...
Added requires-setuptools3434 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools35...
Resolving -e ./requires-setuptools35...
Added requires-setuptools3535 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools36...
Resolving -e ./requires-setuptools36...
Added requires-setuptools3636 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools37...
Resolving -e ./requires-setuptools37...
Added requires-setuptools3737 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools38...
Resolving -e ./requires-setuptools38...
Added requires-setuptools3838 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools39...
Resolving -e ./requires-setuptools39...
Added requires-setuptools3939 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools40...
Resolving -e ./requires-setuptools40...
Added requires-setuptools4040 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools41...
Resolving -e ./requires-setuptools41...
Added requires-setuptools4141 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools42...
Resolving -e ./requires-setuptools42...
Added requires-setuptools4242 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools43...
Resolving -e ./requires-setuptools43...
Added requires-setuptools4343 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools44...
Resolving -e ./requires-setuptools44...
Added requires-setuptools4444 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools45...
Resolving -e ./requires-setuptools45...
Added requires-setuptools4545 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools46...
Resolving -e ./requires-setuptools46...
Added requires-setuptools4646 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools47...
Resolving -e ./requires-setuptools47...
Added requires-setuptools4747 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools48...
Resolving -e ./requires-setuptools48...
Added requires-setuptools4848 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools49...
Resolving -e ./requires-setuptools49...
Added requires-setuptools4949 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools50...
Resolving -e ./requires-setuptools50...
Added requires-setuptools5050 to Pipfile's [packages] ...
✔ Installation Succeeded
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (9db8de7beceaef2b697de3312a725a4ad51317c04e348af9193707fe35a6d56b)!
Installing dependencies from Pipfile.lock (a6d56b)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
+ pipenv lock
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (9db8de7beceaef2b697de3312a725a4ad51317c04e348af9193707fe35a6d56b)!
+ pipenv sync
Installing dependencies from Pipfile.lock (a6d56b)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!
Possibly related: https://github.com/pypa/pip/issues/10739
Sorry about the delay responding to this, been quite a busy week. I'll try to find some time to try out export PIP_CHECK_BUILD_DEPENDENCIES=1
thanks for taking a look.
Issue description
When performing an editable install of a package that depends upon setuptools with build isolation disabled (see https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-build-isolation) pipenv clobbers setuptools while it's being used to install an editable package. I assume this is because installs happen in parallel and setuptools gets swapped out from under the editable package while it's being installed.
Expected result
I'm not sure when this last worked, we hadn't upgraded pipenv for quite a while. But at some point this seemed to work, i.e we could install an editable package with pipenv that depends upon setuptools.
Actual result
Steps to replicate
$ pipenv --support
Pipenv version: `'2023.9.7'` Pipenv location: `'/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv'` Python location: `'/home/stewart/.local/pipx/venvs/pipenv/bin/python'` OS Name: `'posix'` User pip version: `'23.2.1'` user Python installations found: PEP 508 Information: ``` {'implementation_name': 'cpython', 'implementation_version': '3.8.10', 'os_name': 'posix', 'platform_machine': 'x86_64', 'platform_python_implementation': 'CPython', 'platform_release': '5.15.0-69-generic', 'platform_system': 'Linux', 'platform_version': '#76~20.04.1-Ubuntu SMP Mon Mar 20 15:54:19 UTC 2023', 'python_full_version': '3.8.10', 'python_version': '3.8', 'sys_platform': 'linux'} ``` System environment variables: - `SHELL` - `PIPENV_VENV_IN_PROJECT` - `TERMCAP` - `SSH_AUTH_SOCK` - `WINDOW` - `SSH_AGENT_PID` - `PWD` - `LOGNAME` - `XDG_SESSION_TYPE` - `MOTD_SHOWN` - `HOME` - `LANG` - `LS_COLORS` - `SSH_CONNECTION` - `LESSCLOSE` - `XDG_SESSION_CLASS` - `TERM` - `LESSOPEN` - `USER` - `XLA_FLAGS` - `SHLVL` - `XDG_SESSION_ID` - `KUBECONFIG` - `LD_LIBRARY_PATH` - `XDG_RUNTIME_DIR` - `SSH_CLIENT` - `XDG_DATA_DIRS` - `PATH` - `STY` - `DBUS_SESSION_BUS_ADDRESS` - `SSH_TTY` - `USE_GKE_GCLOUD_AUTH_PLUGIN` - `OLDPWD` - `_` - `PIP_DISABLE_PIP_VERSION_CHECK` - `PYTHONDONTWRITEBYTECODE` - `PYTHONFINDER_IGNORE_UNSUPPORTED` Pipenv–specific environment variables: - `PIPENV_VENV_IN_PROJECT`: `true` Debug–specific environment variables: - `PATH`: `/usr/local/cuda/bin:/usr/local/nvidia/bin:/home/stewart/bin/gradle/bin:/home/stewart/bin/cmake/bin:/usr/local/cuda/bin:~/.local/bin:/home/stewart/.local/bin:/home/stewart/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/stewart/bin/node/bin` - `SHELL`: `/bin/bash` - `LANG`: `en_US.UTF-8` - `PWD`: `/home/stewart/src/pipenv_editable_install_repro` --------------------------- Contents of `Pipfile` ('/home/stewart/src/pipenv_editable_install_repro/Pipfile'): ```toml [[source]] url = "https://pypi.org/simple" verify_ssl = true name = "pypi" [packages] requires-setuptools = {file = "requires-setuptools", editable = true} [dev-packages] [requires] python_version = "3.8" python_full_version = "3.8.10" ``` Contents of `Pipfile.lock` ('/home/stewart/src/pipenv_editable_install_repro/Pipfile.lock'): ```json { "_meta": { "hash": { "sha256": "c2fec5ff1a495cbfa1fcbdd572d8f990a3559d4d8b69565aa35d34409ad990a3" }, "pipfile-spec": 6, "requires": { "python_full_version": "3.8.10", "python_version": "3.8" }, "sources": [ { "name": "pypi", "url": "https://pypi.org/simple", "verify_ssl": true } ] }, "default": { "requires-setuptools": { "editable": true, "file": "requires-setuptools" }, "setuptools": { "hashes": [ "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48", "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8" ], "markers": "python_version >= '3.8'", "version": "==68.2.0" } }, "develop": {} } ```