I am trying to do some filtering on requirement.txt before installing individual python packages with pip (v3). I am stumped though why my usage of xargs here is messing up the pip command:
cat ./requirements.txt | xargs -I XXX pip --no-deps install XXX
...
Usage:
pip <command> [options]
no such option: --no-deps
...
If I just run pip --no-deps install SOMEPACKAGE then it works no problem. What's going on here please, and how do I fix it?
You should write pip install --no-deps instead of pip --no-deps install as --no-deps is an option of install and not viceversa.
I have installed and been using Pyenv for some time now, utilizing the Pyenv Virtualenv plugin to create venvs and activating automatically by including a .python-version as per the plugin docs.
It seems to not always work as expected, though. Recently upgraded OSX to Big Sur.
Pip seems to be installing packages globally, rather than into the venv:
pyenv versions
system
2.7.17
3.8.5
3.9.5
* 3.9.5/envs/project_venv (set by /Volumes/path_to_my_project/.python-version)
fulfill
So far, so good.
pyenv which pip
/Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip
As I would expect.
Here's where I'm confounded:
Outside of the venv:
$ pyenv which pip
/Users/mikekilmer/.pyenv/versions/3.8.5/bin/pip
$ pip list -v
Package Version Location Installer
----------------- --------- ------------------------------------------------------------- ---------
# all the global pip packages...
defusedxml 0.7.1 /usr/local/lib/python3.9/site-packages pip
# No Django, which is good
idna 2.10 /usr/local/lib/python3.9/site-packages pip
Inside of the venv:
$ pip install django
# installation output...
$ pip list -v
# abridged
Django 3.2.5 /usr/local/lib/python3.9/site-packages pip
## That's not supposed to be in the global packages!!!
And of course Django is also in the global pip list.
But wait...
Look at this:
$ /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip install django
# installation output...
$ /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/bin/pip list -v
asgiref 3.4.1 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
Django 3.2.5 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
pip 21.1.1 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
pytz 2021.1 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
setuptools 56.0.0 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
sqlparse 0.4.1 /Users/mikekilmer/.pyenv/versions/3.9.5/envs/project_venv/lib/python3.9/site-packages pip
Now it's installed to the correct place.
But that's not the way it's supposed to work, is it? It seems that somehow, pyenv thinks that it's using the venv pip, but isn't.
When I run which pyenv, it returns this function:
pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$#")" ;;
(*) command pyenv "$command" "$#" ;;
esac
}
I am not finding that code in the pyenv repository and I'm using the latest master (pyenv 2.0.3) via Homebrew.
Any insights?
Update
Seems that pip is symlinked to /usr/local/bin/pip3:
$ which pip
pip: aliased to /usr/local/bin/pip3
While pip3 points correctly to the pyenv location:
$ which pip3
/Users/mikekilmer/.pyenv/shims/pip3
$PATH starts like this:
/var/folders/62/38l28z6j12s9lqp6nnhmrlhc0000gn/T//zsh-501/bin:/usr/local/Cellar/pyenv-virtualenv/1.1.5/shims:/Users/mikekilmer/.pyenv/shims:/Users/mikekilmer/.pyenv/bin
The first directory is empty and seems to be part of the Darwin cache directory:
$ getconf DARWIN_USER_CACHE_DIR
/var/folders/62/38l28z6j12s9lqp6nnhmrlhc0000gn/C/
I'm not sure how it got appended to my PATH (by zsh?) or if it could somehow be making the shell think it should find pip elsewhere than with pyenv.
I was similarly confused at some point. Turned out that I installed / upgraded python and pip with different methods (brew, easy_install, curl, sudo ...). That's why my paths got messed up.
Removing pip everywhere and reinstalling it helped.
When I run which pyenv, it returns this function:
pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(activate | deactivate | rehash | shell) eval "$(pyenv "sh-$command" "$#")" ;;
(*) command pyenv "$command" "$#" ;;
esac
}
You can add pyenv to the PATH in your ~/.zshrc or ~/.zshenv in order to get the correct path.
echo 'export PATH=$HOME/.pyenv/bin:$PATH' >> ~/.zshenv
I hope for a more complete explanation, but installing with pip3 solved the issue.
I uninstalled pip, and I installed pip3 instead. Now, I want to use pip3 by typing pip only. The reason is I am used to type pip only and every guide uses the pip command, so every time I want to copy and paste commands, I have to modify pip to pip3 which wastes time. When I type pip I have an error which is pip: command not found which means pip command is not taken. Is it possible to make pip points to pip3?
You can use pip3 using the alias pip by adding alias to your .bashrc file.
alias pip=pip3
or by adding a symlink named pip to your $PATH, which points to the pip3 binary.
If there is no ~/.bashrc in your home directory on macOS, inputting
alias pip=pip3
in your ~/.zprofile file has the same effect.
Rather than manually creating your own alias in bash and hoping this doesn't conflict with anything, most package managers should allow you to register the version you wish to use whilst maintaining dependencies.
For instance on Linux:
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
Or on Mac (MacPorts):
port select --set pip pip3
Solution 1
Check which version pip is pointing to
pip --version
pip 18.0 from /usr/lib/python2.7/site-packages/pip (python 2.7)
If your pip is pointing to pip2, locate where is the pip "binary".
which pip
/usr/bin/pip
This is a simple python script:
cat /usr/bin/pip
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())
So just change the shebang from #!/usr/bin/python2 to #!/usr/bin/python3.
Now pip is pointing to pip3.
pip --version
pip 18.0 from /usr/lib/python3.6/site-packages/pip (python 3.6)
Solution 2
Remove /usr/bin/pip make make a symbolic link from the wanted pip version to it instead.
sudo rm /usr/bin/pip
sudo ln -s /usr/bin/pip3.6 /usr/bin/pip
Since you uninstalled pip, this solution assumes you're only going to use pip3.
Open your terminal.
Create a simple link. To do that type:
sudo ln -s /usr/bin/pip3 /usr/bin/pip
Now when you type pip, it will invoke pip3.
Check that it worked by typing pip --version
pip --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
You're all set!
You can install pip after install pip3 by the below command:
pip3 install --upgrade pip
after that:
~ pip --version
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
You can write pip for pip3 after changing bashrc file in the home directory.
In mac -
Open bashrc file -
vim ~/.bashrc
Add this line at the end of the file -
alias pip="pip3"
Close the file. Don't forget to source this file in the terminal by
source ~/.bashrc
You are good to go. Now, whenever you will use pip in any command. it will be interpreted as pip3
You can check it by running the command -
pip --version
Pip is installed in /usr/bin/. If you don't have pip at all, I would suggest to install pip3 only. Make sure you don't need older version.
You can check available pip versions using following command.
ls /usr/bin/pip*
If you have multiple pip you need to prioritize your pip versions. I had only pip3 so I add it to the first priority. You can use following command and it is done.
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
You will get output as :
update-alternatives: using /usr/bin/pip3 to provide /usr/bin/pip (pip) in auto mode
Test now:
pip --version
You will get:
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
If you have other version for python2.7, you can use same update command and change last digit 1 to 2. This will make it second priority.
I believe one shouldn't do such a thing. Actually I would argue it's even better to not use the pip, pip3, etc. scripts ever. Instead one should always prefer the more explicit and surefire way of using pip's executable module for one specific Python interpreter:
path/to/pythonX.Y -m pip somecommand
References:
https://snarky.ca/why-you-should-use-python-m-pip/
https://snarky.ca/a-quick-and-dirty-guide-on-how-to-install-packages-for-python/
This can be done by simply creating an alias for the command.
To create an alias just type
$alias new_command="existing_command"
In your case,
$alias pip="pip3"
Although this isn't permanent. OT make it permanent edit your bashrc file
$ vim ~/.bashrc
an to the end of it append the line.
$alias pip="pip3"
It depends on how you manage your python versions (system, brew, pyenv, ...) and which python installation you are currently using.
For example if you use brew then creating a simlink is a good option:
ln -s -f /usr/local/bin/pip3 /usr/local/bin/pip
validate that pip uses the correct version:
which pip
will give you
/usr/local/bin/pip
Copy the pip3 file and rename as pip:
sudo cp /usr/bin/pip3 /usr/bin/pip
pip --version
and
pip3 --version
Works now.
Using pip install on some large package doesn't show any progress report while downloading.
Using the -v, --verbose option doesn't do it and there doesn't seem to be any other relevant option.
At least pip9 has -v option which prints debug msg during installation of the package.
$ pip --version
pip 9.0.1
Help:
$ pip install --help
..
..
-v, --verbose Give more output. Option is additive, and can be used up to 3 times.
Usage:
pip install -r requirements.txt -vvv
Seems that pip needs a --log argument to echo to the screen, e.g.:
$ pip -v --log /tmp/pip.log install $python_pkg --upgrade
I've read the Pip related responses and still have this question. I'm trying to install pip on Mac OS X 10.6.8. In brief, I run sudo python get-pip.py and get an error that the pip Requirement is already up to date.
But I don't see a 'pip' executable file in the expected directory and can't run pip. Should there be a file called pip in the target pip folder?
More detail:
I'm following directions at: http://docs.python-guide.org/en/latest/starting/install/osx/
1) Used ez_install to install setuptools
2) bashed:
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py $
sudo python get-pip.py
Response is
Requirement already up-to-date: pip in /Library/Python/2.6/site-packages
... I can see a lot of files in this directory
3) I then try to use pip:
/Library/Python/2.6/site-packages/pip install virtualenv
Get back > pip: is a directory
4) I try
/ Library/Python/2.6/site-packages/pip/pip install virtualenv
-bash: /Library/Python/2.6/site-packages/pip/pip: No such file or directory
I look in the above path and can see the pip folder, with numerous files including __main__ and __init__ but no file named pip. Should there be one? if so, how might I clear out the old install and reinstall?
Thanks for any advice!
SL
Here's how I successfully installed pip from the Github repositories on Max OS X 10.9:
Get pip repository:
$ git clone https://github.com/pypa/pip
Perform setup:
$ cd pip
$ sudo python setup.py install
That's it. A test run should give something like:
$ pip -V
pip 1.6.dev1 from /Library/Python/2.7/site-packages/pip-1.6.dev1-py2.7.egg (python 2.7)
And my PATH environment variable is set to:
$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
echo export PATH="/usr/local/bin:$PATH" >> ~/.bash_profile