Installing specific package version with pip
Asked Answered
A

12

1954

I am trying to install version 1.2.2 of MySQL_python, using a fresh virtualenv created with the --no-site-packages option. The current version shown in PyPi is 1.2.3. Is there a way to install the older version? I have tried:

pip install MySQL_python==1.2.2

However, when installed, it still shows MySQL_python-1.2.3-py2.6.egg-info in the site packages. Is this a problem specific to this package, or am I doing something wrong?

Alverson answered 7/3, 2011 at 22:58 Comment(0)
B
1473

TL;DR:

Update as of 2022-12-28:

pip install --force-reinstall -v

For example: pip install --force-reinstall -v "MySQL_python==1.2.2"

What these options mean:

  • --force-reinstall is an option to reinstall all packages even if they are already up-to-date.
  • -v is for verbose. You can combine for even more verbosity (i.e. -vv) up to 3 times (e.g. --force-reinstall -vvv).

Thanks to @Peter for highlighting this (and it seems that the context of the question has broadened given the time when the question was first asked!), the documentation for Python discusses a caveat with using -I, in that it can break your installation if it was installed with a different package manager or if if your package is/was a different version.


Original answer:

  • pip install -Iv (i.e. pip install -Iv MySQL_python==1.2.2)

What these options mean:

  • -I stands for --ignore-installed which will ignore the installed packages, overwriting them.
  • -v is for verbose. You can combine for even more verbosity (i.e. -vv) up to 3 times (e.g. -Ivvv).

For more information, see pip install --help

First, I see two issues with what you're trying to do. Since you already have an installed version, you should either uninstall the current existing driver or use pip install -I MySQL_python==1.2.2

However, you'll soon find out that this doesn't work. If you look at pip's installation log, or if you do a pip install -Iv MySQL_python==1.2.2 you'll find that the PyPI URL link does not work for MySQL_python v1.2.2. You can verify this here: http://pypi.python.org/pypi/MySQL-python/1.2.2

The download link 404s and the fallback URL links are re-directing infinitely due to sourceforge.net's recent upgrade and PyPI's stale URL.

So to properly install the driver, you can follow these steps:

pip uninstall MySQL_python
pip install -Iv http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz/download
Boston answered 7/3, 2011 at 23:18 Comment(3)
There should be no problem with having multiple versions though, that's the point of creating new folders for every version and using .pth files.Uganda
Curious why you use the -I option if we have already removed the existing installation - could you give some detail on that?Alverson
Thanks for updating the answer, even though it’s over 10 years old. It seems however that nowadays pip always tries to satisfy the passed requirement (including the version), downgrading if necessary, so it should not be required anymore to pass any additional option.Sortition
G
738

You can even use a version range with pip install command. Something like this:

pip install 'stevedore>=1.3.0,<1.4.0'

And if the package is already installed and you want to downgrade it add --force-reinstall like this:

pip install 'stevedore>=1.3.0,<1.4.0' --force-reinstall
Geller answered 19/11, 2015 at 19:42 Comment(3)
for example: $ pip install 'xkcdpass==1.2.5' --force-reinstallFpc
Use double quotes on Windows: pip install "stevedore>=1.3.0,<1.4.0"Phosphatase
Or use a caret to escape: pip install antigravity^<1.0Bellis
S
208

One way, as suggested in this post, is to mention version in pip as:

pip install -Iv MySQL_python==1.2.2

i.e. Use == and mention the version number to install only that version. -I, --ignore-installed ignores already installed packages.

Stakeout answered 4/4, 2016 at 9:58 Comment(1)
Beware! I had the experience that this installed the different versions next to each other! Also interestingly, pip list was not aware of that, but conda list was (and would display the different package versions). It also completely confused Pycharm.Godfry
R
100

To install a specific python package version whether it is the first time, an upgrade or a downgrade use:

pip install --force-reinstall MySQL_python==1.2.4

MySQL_python version 1.2.2 is not available so I used a different version. To view all available package versions from an index exclude the version:

pip install MySQL_python==
Rainger answered 5/4, 2018 at 7:0 Comment(1)
With pip 10.0.1 this is the only working solution. "-I" option actually reinstall the previous version.Quartet
H
42

I believe that if you already have a package it installed, pip will not overwrite it with another version. Use -I to ignore previous versions.

Hispidulous answered 7/3, 2011 at 23:13 Comment(4)
I do not have it installed - using a fresh virtualenv created with the --no-site-packages optionAlverson
okay, so you ask for version 1.2.2 and it still installs 1.2.3, and nothing else was installed? The syntax you used is correct for getting specific versions.Hispidulous
"using a fresh virtualenv created with the --no-site-packages option"; you might need to preceed this with the command unset PYTHONPATH so to keep pip from seeing your pre-installed librariesAntonietta
No such option: -ITreacle
E
30

Sometimes, the previously installed version is cached.

~$ pip install pillow==5.2.0

It returns the followings:
Requirement already satisfied: pillow==5.2.0 in /home/ubuntu/anaconda3/lib/python3.6/site-packages (5.2.0)

We can use --no-cache-dir together with -I to overwrite this

~$ pip install --no-cache-dir -I pillow==5.2.0
Elisavetpol answered 6/1, 2019 at 1:10 Comment(0)
C
13

Since this appeared to be a breaking change introduced in version 10 of pip, I downgraded to a compatible version:

pip install 'pip<10' 

This command tells pip to install a version of the module lower than version 10. Do this in a virutalenv so you don't screw up your site installation of Python.

Chemoprophylaxis answered 2/9, 2018 at 0:54 Comment(0)
F
10

This below command worked for me

Python version - 2.7

package - python-jenkins

command - $ pip install 'python-jenkins>=1.1.1'

Feld answered 1/10, 2019 at 14:39 Comment(1)
I didn't downvote, but can see that this doesn't answer the question nor does it provide any helpful information that the OP can use to solve the problem.Janeyjangle
C
9

I recently ran into an issue when using pip's -I flag that I wanted to document somewhere:

-I will not uninstall the existing package before proceeding; it will just install it on top of the old one. This means that any files that should be deleted between versions will instead be left in place. This can cause weird behavior if those files share names with other installed modules.

For example, let's say there's a package named package. In one of packages files, they use import datetime. Now, in [email protected], this points to the standard library datetime module, but in [email protected], they added a local datetime.py as a replacement for the standard library version (for whatever reason).

Now lets say I run pip install package==3.0.0, but then later realize that I actually wanted version 2.0.0. If I now run pip install -I package==2.0.0, the old datetime.py file will not be removed, so any calls to import datetime will import the wrong module.

In my case, this manifested with strange syntax errors because the newer version of the package added a file that was only compatible with Python 3, and when I downgraded package versions to support Python 2, I continued importing the Python-3-only module.

Based on this, I would argue that uninstalling the old package is always preferable to using -I when updating installed package versions.

Cracow answered 22/2, 2019 at 16:11 Comment(0)
L
1

There are 2 ways you may install any package with version:- A). pip install -Iv package-name == version B). pip install -v package-name == version

For A

Here, if you're using -I option while installing(when you don't know if the package is already installed) (like 'pip install -Iv pyreadline == 2.* 'or something), you would be installing a new separate package with the same existing package having some different version.

For B

  1. At first, you may want to check for no broken requirements. pip check

2.and then see what's already installed by pip list

3.if the list of the packages contain any package that you wish to install with specific version then the better option is to uninstall the package of this version first, by pip uninstall package-name

4.And now you can go ahead to reinstall the same package with a specific version, by pip install -v package-name==version e.g. pip install -v pyreadline == 2.*

Logogram answered 12/11, 2018 at 6:14 Comment(0)
E
1

If you want to update to latest version and you don't know what is the latest version you can type.

pip install MySQL_python --upgrade

This will update the MySQL_python for latest version available, you can use for any other package version.

Elaina answered 30/9, 2019 at 12:10 Comment(0)
C
0

dependency packaging has had a new release, wherein it has dropped LegacyVersion from its codebase
The quick solution might be pin packaging==21.3

Continuative answered 8/12, 2022 at 10:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.