Dealing with multiple Python versions and PIP?

后端 未结 23 2813
走了就别回头了
走了就别回头了 2020-11-21 06:58

Is there any way to make pip play well with multiple versions of Python? For example, I want to use pip to explicitly install things to either my s

相关标签:
23条回答
  • 2020-11-21 07:18

    From here: https://docs.python.org/3/installing/

    Here is how to install packages for various versions that are installed at the same time linux, mac, posix:

    python2   -m pip install SomePackage  # default Python 2
    python2.7 -m pip install SomePackage  # specifically Python 2.7
    python3   -m pip install SomePackage  # default Python 3
    python3.4 -m pip install SomePackage  # specifically Python 3.4
    python3.5 -m pip install SomePackage  # specifically Python 3.5
    python3.6 -m pip install SomePackage  # specifically Python 3.6
    

    On Windows, use the py Python launcher in combination with the -m switch:

    py -2   -m pip install SomePackage  # default Python 2
    py -2.7 -m pip install SomePackage  # specifically Python 2.7
    py -3   -m pip install SomePackage  # default Python 3
    py -3.4 -m pip install SomePackage  # specifically Python 3.4
    
    0 讨论(0)
  • 2020-11-21 07:19

    Other answers show how to use pip with both 2.X and 3.X Python, but does not show how to handle the case of multiple Python distributions (eg. original Python and Anaconda Python).

    I have a total of 3 Python versions: original Python 2.7 and Python 3.5 and Anaconda Python 3.5.

    Here is how I install a package into:

    1. Original Python 3.5:

      /usr/bin/python3 -m pip install python-daemon
      
    2. Original Python 2.7:

      /usr/bin/python -m pip install python-daemon
      
    3. Anaconda Python 3.5:

      python3 -m pip install python-daemon
      

      or

      pip3 install python-daemon
      

      Simpler, as Anaconda overrides original Python binaries in user environment.

      Of course, installing in anaconda should be done with conda command, this is just an example.


    Also, make sure that pip is installed for that specific python.You might need to manually install pip. This works in Ubuntu 16.04:

    sudo apt-get install python-pip 
    

    or

    sudo apt-get install python3-pip
    
    0 讨论(0)
  • 2020-11-21 07:20

    If you have multiple versions as well as multiple architectures (32 bit, 64 bit) you will need to add a -32 or -64 at the end of your version.

    For windows, go to cmd and type py --list and it will produce the versions you have installed. The list will look like the following:

    Installed Pythons found by py Launcher for Windows
     -3.7-64 *
     -3.7-32
     -3.6-32
    

    The full command as an example will be:

    py -3.6-32 -m pip install (package)
    

    If you want to get more indepth, to install a specific version of a package on a specific version of python, use ==(version) after the package. As an example,

    py -3.6-32 -m pip install opencv-python==4.1.0.25
    
    0 讨论(0)
  • 2020-11-21 07:20

    Here is my take on the problem. Works for Python3. The main features are:

    • Each Python version is compiled from source
    • All versions are installed locally
    • Does not mangle your system's default Python installation in any way
    • Each Python version is isolated with virtualenv

    Prerequisites: If you are using some bare-bones thin client with no extra turf installed, you should run this first (in ubuntu 18.04 at least, extra packages added for convenience):

    sudo apt-get update
    sudo apt-get install software-properties-common
    sudo apt-add-repository universe
    sudo apt-get update
    sudo apt-get install -y build-essential cmake
    
    sudo apt-get install -y zlib1g zlib1g-dev libsqlite3-dev \
    openssl libssl-dev libffi-dev unzip pciutils net-tools \
    libblas-dev gfortran libblas3 
    

    The steps are as follows:

    1. If you have several extra python versions installed in some other way, get rid of them, e.g., remove $HOME/.local/lib/python3.x, etc. (also the globally installed ones). Don't touch your system's default python3 version though.

    2. Download source for different python versions under the following directory structure:

       $HOME/
           python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
             Python-3.4.8/
             Python-3.6.5/
             Python-3.x.y/
             ...
      
    3. At each "Python-3.x.y/" directory, do the following (do NOT use "sudo" in any of the steps!):

       mkdir root
       ./configure --prefix=$PWD/root 
       make -j 2
       make install
       virtualenv --no-site-packages -p root/bin/python3.x env
      
    4. At "python_versions/" create files like this:

       env_python3x.bash:
      
       #!/bin/bash
       echo "type deactivate to exit"
       source $HOME/python_versions/Python-3.x.y/env/bin/activate
      
    5. Now, anytime you wish to opt for python3.x, do

       source $HOME/python_versions/env_python3x.bash
      

    to enter the virtualenv

    1. While in the virtualenv, install your favorite python packages with

       pip install --upgrade package_name
      
    2. To exit the virtualenv and python version just type "deactivate"

    UPDATE

    It seems that --no-site-packages is deprecated. There's an easy fix for this: Once you have activated the virtualenv, just point the HOME env variable to somewhere else than your actual home directory, i.e.:

    export HOME=some/where/else
    

    A nice way to do this in general is:

    • Create virtualenv
    • Activate virtualenv
    • If you want to "recycle" existing libraries to your virtualenv, softlink them from your existing install, i.e. ln -s $HOME/.local/lib/python3.6/site-packages/numpy $PWD/venv/lib/python3.6/site-packages/
    • Do export PYTHONPATH=, export HOME=/some/other/dir

    Now you should have custom-isolated virtualenv.

    UPDATE 2 / SUDO

    Wan't to force sudo to use your virtualenv?

    Defaults        secure_path="/home/USENAME/Python-3.x.y/env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
    Defaults        env_keep += "VIRTUAL_ENV"
    Defaults        env_keep += "PYTHONPATH"
    

    Now try "sudo python3 --version" and magic should happen

    UPDATE 3 / DOCKER

    Enable virtualenv inside your docker (of course, you have built it in your docker image):

    ENV VIRTUAL_ENV=/home/USER/Python-3.x.y/env
    ENV PYTHONPATH=
    ENV PATH="$VIRTUAL_ENV/bin:$PATH"
    
    0 讨论(0)
  • 2020-11-21 07:20

    Context: Archlinux

    Action:
    Install python2-pip:
    sudo pacman -S python2-pip

    You now have pip2.7:
    sudo pip2.7 install boto

    Test (in my case I needed 'boto'):
    Run the following commands:

    python2
    import boto
    

    Success: No error.

    Exit: Ctrl+D

    0 讨论(0)
  • 2020-11-21 07:22

    /path/to/python2.{5,6} /path/to/pip install PackageName doesn't work?

    For this to work on any python version that doesn't have pip already installed you need to download pip and do python*version* setup.py install. For example python3.3 setup.py install. This resolves the import error in the comments. (As suggested by @hbdgaf)

    0 讨论(0)
提交回复
热议问题