可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I can't seem to use sudo pip install correctly so that it installs into the following directory:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
so that I can then import the module using python
I've run
sudo pip install scikit-learn --upgrade
Result
Requirement already up-to-date: scikit-learn in /usr/local/lib/python2.7/site-packages
Cleaning up...
However, it's not in the correct directory
How do I get sudo pip install to install into correct directory?
In addition, I've tried
sudo pip install Scrappy
I get the following message
new-host-2:site-packages Chris$ sudo pip install Scrapy
Password:
Requirement already satisfied (use --upgrade to upgrade): Scrapy in /usr/local/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): Twisted>=10.0.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): w3lib>=1.8.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /usr/local/lib/python2.7/site-packages (from Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cryptography>=0.2.1 in /usr/local/lib/python2.7/site-packages (from pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages (from zope.interface>=3.6.0->Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cffi>=0.8 in /usr/local/lib/python2.7/site-packages (from cryptography>=0.2.1->pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python2.7/site-packages (from cffi>=0.8->cryptography>=0.2.1->pyOpenSSL->Scrapy)
Both these instances demonstrate that it's been installed but not correctly. For example, when I run the following import in python:
import scrapy
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-6-51c73a18167b> in <module>()
----> 1 import scrapy
ImportError: No module named scrapy
I've tried the following:
sudo ln -s /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
回答1:
From the comments to the original question, it seems that you have multiple versions of Python installed, and that pip just goes to the wrong version.
First, to know which version of python you're using, just type which python
. You should either see:
which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
if you're going to the right version of python, or:
which python
/usr/bin/python
If you're going to the 'wrong' version. To make pip go to the right version, you first have to change the path:
export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:${PATH}
typing 'which python' would now get you to the right result. Next, install pip (if it's not already installed for this installation of python). Finally, use it. you should be fine now.
回答2:
This is what worked for me on Windows. The cause being multiple python installations
- update path with correct python
- uninstall pip using
python -m pip uninstall pip setuptools
- restart windows didn't work until a restart
回答3:
Virtualenv is your friend
Even if you want to add a package to your primary install, it's still best to do it in a virtual environment first, to ensure compatibility with your other packages. However, if you get familiar with virtualenv, you'll probably find there's really no reason to install anything in your base install.
回答4:
1 - Something that might work
The pip
executable is actually a Python script.
By default it contains (on Linux):
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.6','console_scripts','pip'
__requires__ = 'pip==1.5.6'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
)
So if you got the same in MacOS, pip
would always use /usr/bin/python
.
But this is a default. You can still provide the version of python you want either by editing the file or by using python explicitly.
If which python
returns /usr/bin/python
then something went wrong when you installed your own version. If it is /Library/Frameworks/Python.framework/Versions/2.7/bin/python
, you can directly call:
sudo python `which pip` install scikit-learn --upgrade
However, chances are high that it won't work. The reason is that sudo
is resetting all your environment variables. To make it work, the easiest would be to use:
sudo -E pip install scikit-learn --upgrade
or
sudo -E python `which pip` install scikit-learn --upgrade
depending on your setup.
2 - What you should do
pip
was not thought of as something that root
should execute. The actual best way to use it is to install a local, non-root, python version. You just have to make sure that you use it by default by setting up the correct environment variables (such as PATH
on Linux) and then install pip
without sudo
using that python version.
An even better way would be to setup virtualenv
s from your root install.
This way, you can install/update whatever you want without root privileges and never bother again about why sudo pip
is not working. You would also avoid to provide root privileges to whatever is on Pypi and that would warrant that you don't mix system libs with your own.
回答5:
I totally agree with the guys, it's better to use virtualenv so you can set a custom environment for every project. It ideal for maintenance because it's like a different world for every project and every update of an application you make won't interfere with other projects.
Here you can find a nutshell of virtualenv related to installation and first steps.
回答6:
- download pip at https://pypi.python.org/pypi/pip (tar)
- unzip tar file
- cd to the file’s directory
- sudo python2.7 setup.py install
回答7:
You could just change the shebang line. I do this all the time on new systems.
If you want pip
to install to a current version of Python installed just update the shebang line to the correct version of pythons path.
For example, to change pip (not pip3) to install to Python 3:
#!/usr/bin/python
To:
#!/usr/bin/python3
Any module you install using pip
should install to Python not Python.
Or you could just change the path.
回答8:
Make sure you pip version matches your python version.
to get your python version use:
python -V
then install the correct pip. You might already have intall in that case try to use:
pip-2.5 install ...
pip-2.7 install ...
or for those of you using macports make sure your version match using.
port select --list pip
then change to the same python version you are using.
sudo port select --set pip pip27
Hope this helps. It work on my end.
回答9:
You Should uninstall the existed python,then download new version.