-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Add an upgrade-all command #4551
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Comments
it doesnt make sense to add an upgrade_all command until there is a curated package repository |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
https://github.com/nschloe/pipdate does something like a makeshift global upgrade. Be aware though that upgrading can break things. |
You're absolutely right, it can break things ! 👍 |
Here is my attempt of an "almost" robust solution - pipupgrade. Also handles packages that break change. |
As this ticket is blocked by the development of the dependency resolver (#988), I thought I would mention here that the team is looking for help from the community to move forward on that subject. We need to better understand the circumstances under which the new resolver fails, so are asking for pip users with complex dependencies to:
You can find more information and more detailed instructions here |
I think this issue can now progress |
Well said, now we need someone to actually progress things. Any volunteers? |
@uranusjr I volunteer, any tips on getting started? |
Basic workflow might be something like this: python -m venv venv
venv/bin/python -m pip list --format freeze | \
grep --invert-match "pkg-resources" | \
cut --delimiter "=" --fields 1 | \
xargs pip install --upgrade Note that this installs / upgrades all the packages of the virtual environment in one |
I would filter with the or would we let this up to the user, who can suply |
Hi, @JensTimmerman. I did not use the |
@Bengt got it! we'll leave the filtering up to the user! However, I'm not seeing the difference in practice, if the packages are not outdated, and not new dependencies of packages that are outdated, they don't need to be considered? If a package has a dependency that is outdated, the dependency will show up in the list of outdated packages right? Or am I missing something? |
@JensTimmerman I am not sure that I get what you are saying. However, an issue can arise if a current package depends on an outdated dependency: |
I made a new attempt at implementing a upgrade-all command. in #10491 |
This comment has been minimized.
This comment has been minimized.
FWIW, my Meta Package Manager project can emulate the missing
|
Until an pip list --outdated | grep -Ev "Package|^-" | awk '{print $1}'| while IFS= read -r line ; do pip install "$line" -U ; done |
I think there are enough shell scripts doing this already. The problem is that this might cause compatibility issues. But, I wonder if there is already a 'safe' way to do an upgrade all command by now? If we take the output of |
Hi, it seems the blocker is resolved, what's the current state of this feature? Are there any plans to implement it? |
#10491 seems to have stalled, and no-one else is working on it as far as I am aware. |
okay. when can this command be added? it has been 6 years |
Feel free to submit a pull request. |
#10491 is open for feedback |
Bump. |
Linux/macOS with
Windows with
jq, if not already installed: |
@utkonos It is better not to use pip list --format json | jq -r '.[].name' | xargs pip install -U
Code in PowerShell (quickly tested in Windows and Linux): python -m pip install -U (pip list --format json | ConvertFrom-Json | ForEach-Object { $_.name }) |
I have found this one useful as well for when a particular library lags behind or for any other reason needs to be skipped no matter what. |
This might not be the purpose of the discussion, but I started to use poetry as package manager and I am enjoying it a lot . Maybe a very google alternative to handle with pip limitations |
Yes, higher level environment managers like poetry (and rye, pdm, conda, uv, pip-tools, etc.) are better suited to doing an upgrade all. They can remove or downgrade transitive dependencies, because they have some understanding of what packages are required or requested by the user, whereas pip only understands what's in the environment now. Pip, alas, only focuses on installing, it doesn't try to manage the environment itself. Users with those needs should look at those packages (I'm personally following uv as it supports features like constraints that were not as simple in poetry). Or look at writing their own scripts that wraps pip commands. |
@notatallshaw I have this exact problem with uv, it refused to install or update some packages because it claims it cannot satisfy the dependencies, I don't want it to satisfy the dependencies, I want it to update all packages to the latest versions. |
If you don't mind likely breaking your environment you can do it with pip like this:
But to be clear, because pip is just getting the latest version of each package and not resolving dependencies:
Pip is not going to provide that as standard functionality. |
The solution taking into account dependencies is already here, just few messages above yours:
I am not sure if I tested the solution with editable installs but I think it will work with them. Just a thought about discussions hereWhy do we have discussions if older communication gets ignored? 🤔 |
Yes, I was replying to a request that specifically said they did not want to resolve dependencies, they just wanted the latest version of every package. As soon as you do take into account of dependencies you might not get the latest version of every package and you might get an error if your environment already has conflicting dependencies. It's obviously not a good idea, but that was the request. |
@notatallshaw oh I know it's possible, I'm using my own solution now, (#10491) |
Ref: #59
Blocked by: #988
Moving the discussion of upgrade-the-world functionality to a separate issue. It doesn't make sense to start this discussion until there's a dependency resolver added.
The text was updated successfully, but these errors were encountered: