Changing default Python - python

When I install anything with setup.py or with pip on OS X, it is installed only into an older Python version. What is the best way to solve this?
Here is written that a solution is to modify the first line of /usr/local/share/python/pip, but I do not know how to access that file.

Try: /path/to/your/python -m pip install {yourlib}
Long answer:
For more information on what's going on, you can run which python or which pip. This shows you exactly which python/pip is being run. Even if you install another pip for another python, running the new pip may not install the package on the new python. If you look at the output from pip, you may see something like:
$ pip install pyodbc
Requirement already satisfied (use --upgrade to upgrade): pyodbc in /some/other/python/path/pyodbc-3.0.7-py2.7-linux-x86_64.egg
Cleaning up...
If your previous python path (echo $PYTHONPATH) can be seen by your new pip, or if it's linked in ~/.local, then pip will find the package and think it's already installed. If you uninstall the package on the old version, then the reinstall should install to the right location if you're using the right pip.
Response to follow-up question in comments - When pip isn't found by bash:
There are quite a few solutions:
The above will work
If you want to be able to type pip, then putting alias pip='/path/to/your/python -m pip' or simply alias pip='/path/to/your/new/pip' will work
Uninstalling and reinstalling the new python/pip package should put pip in your default namespace. Likely your old pip was around when you first installed, so it didn't overwrite.
Play with your $PATH. The most complicated, but probably the cleanest answer. I have a ~/bin/ in my path, to which I add symlinks for anything I want in my standard path.

Related

Scripts folder installs empty python 3.10.3

So im pretty new to python and i need pip for something i wanna do, but everytime i install python the Scripts folder where pip should be always installs empty. I make sure that install pip is checked when downloading python. How do I get it to install pip with python?
If you installed Python, it came bundled with pip.
The default packages:
C:\Users\<Your username>\AppData\Local\Programs\Python\Python310\Lib\site-packages
A better practice is to install a venv for every project you are working on. Every venv will have its own set of dependencies(i.e. packages), and it will be easier to manage them.
You can find installed packages in your venv:
YOUR_PROJECT_PATH\venv\Lib\site-packages
EDIT
From official docs:
Pip not installed¶ It is possible that pip does not get installed by default. One potential fix is:
python -m ensurepip --default-pip
There are also additional resources
for Installing pip

How to recover PIP

I think I uninstalled pip by mistake ^^
I ran something like "pip uninstall pip" in CMD and it completely broke, giving fatal errors.
I uninstalled and reinstalled python, added the correct folders back to PATH, but now it's only working via python -m pip XXXX and not by typing pip XXXX...
If I type pip XXX i get an empty row and CMD gives me back the cursor.
How can I recover? I liked pip XXX better and I am sure that the pip folder is in PATH.
It would help greatly to know what version of each you are using and what OS but for a generic answer...
You could try to install it manually:
Vist:
https://pip.pypa.io/en/stable/installing.html
Download:
get-pip.py
python get-pip.py
Make sure your python version matches your pip version. Otherwise you will always have to be specific on your installs. And for sake of simplicity make sure it works fine with just one version of Python installed. Then if that works you can consider having more.
After installing it, if you upgrade your python version make sure you keep it up to date.
I would try something like:
pip install --upgrade --no-deps --force-reinstall
As os version 21.3.1, you can install pip with the one-liner:
python -m ensurepip --upgrade.
See installation of pip doc for details.

pip stopped working after update to 20.1.1

I always install packages with the command "python -m pip install " in cmd. Today I got the notification that I am using pip and pip 20.1.1 can be installed by typing "python -m pip install --upgrade pip". I did that and now pip fails to install or uninstall programmes. This is the error message I get when trying to install a new package.
ImportError: cannot import name 'webencodings' from 'pip._vendor' (C:\Users\user\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pip\_vendor\__init__.py)
I am a complete beginner and don't want to mess to much with the pip directory, is there an easy solution for my problem?
It looks like this has been happening with pip 20+ when your "system" pip install gets incorrectly upgraded -- it's honestly pretty messed up that the default upgrade command that pip itself tells you to use does this "wrong" upgrade.
See this issue for a detailed discussion, a bunch of related issues, and some workarounds. This more recent report has a bunch of people reporting the same for pip20.
Potentially the easiest solution is to uninstall it:
python -m pip uninstall pip
Which should bring you back to the "system" pip installation. And then just ignore the warning, or only work inside virtualenvs, where you shuold be able to safely use updated pip.
Another possible workaround is to install an older version manually using the get-pip script:
python get-pip.py pip==19.3.1
Note: If anyone has better advice please feel free to comment / correct me.

How to remove in development mode a python package's dependencies with pip (note not the same as removing the package)?

Let's say I am working on a python package. How can I revert a pip install -e .[dev]?
That is, something along the lines of python setup.py develop --uninstall but with pip.
Thanks in advance.
Edit
This question has been identified as similar to this one, but it's not. My question is a bit more fundamental.
Unfortunately, there is no pip command to uninstall a package and also uninstall dangling dependencies. You have to uninstall one-by-one by checking in pip freeze output.
To uninstall an editable install, you'll need to know the name of the package (check in the setup.py or pyproject.toml file) and then you can remove the usual way:
pip uninstall somepackage

Installing specific package version with pip

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?
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
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
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.
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==
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.
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
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.
This below command worked for me
Python version - 2.7
package - python-jenkins
command - $ pip install 'python-jenkins>=1.1.1'
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 package#2.0.0, this points to the standard library datetime module, but in package#3.0.0, 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.
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
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.*
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.
dependency packaging has had a new release, wherein it has dropped LegacyVersion from its codebase
The quick solution might be pin packaging==21.3

Categories

Resources