pythonpython-3.xpackage-managers

How to install a package for a specific Python version on Windows 10?


I currently have Python 3.7.4(64 bit) and Python 3.6.6(64 bit) on a Windows 10 64 bit laptop with both versions in my system environment variables(path).

I previously only had 3.7 and installed 3.6 to use pocketsphinx, and now I want to upgrade PyAudio of my 3.6. doing pip install --upgrade pyaudio is upgrading the pyaudio of 3.7. So, how do i upgrade(or even install) packages of specific python versions on a windows machine?

Here's also what I've tried:
python-3.6.6 pip install --upgrade pyaudio,
python3.6.6 pip install --upgrade pyaudio,
python3.6 pip install --upgrade pyaudio and
pip3.6.6 install --upgrade pyaudio.
Yes, these may be stupid, but I was helpless.

EDIT 1:
I also run pip install --upgrade pyaudio in power shell by opening it in the directory where my python 3.6 is installed, which is(default installation directory for windows): C:\Users\--user-name--\AppData\Local\Programs\Python\Python36 like: this is what's happening and it's not working as you can see from the version, pip install would still install new packages for python 3.7


Solution

  • The golden rule when one wants to access one of the multiple software versions (applies to any software (other than Python), on any OS) existing on a machine: use absolute paths.

    There are multiple ways of pip installing (especially when involving VEnvs):

    1. Run PIP directly - most frequently used:

      pip install --upgrade pyaudio
      
    2. Run python -m pip:

      python -m pip install --upgrade pyaudio
      
    3. Run other convenience wrappers (Py (Win specific): [Python.Docs]: Using Python on Windows - From the command-line):

      py -3.6 -m pip install --upgrade pyaudio
      

    But the form that I prefer (as it will always work - because it doesn't rely on environment variables like PATH), is the 2nd one:

    "${PATH_TO_YOUR_PYTHON_3_6}" -m pip install --upgrade pyaudio
    

    where ${PATH_TO_YOUR_PYTHON_3_6} is just a placeholder for the actual Python 3.6 executable path (e.g. %ProgramFiles%\Python 3.6\python.exe).
    Note that this works fine (end easy) when having multiple Python versions installed (custom built, VEnvs, ...).
    Check [Python.Docs]: Using Python on Windows - Installing Without UI for more details regarding install paths.

    Generalizing:

    "${PATH_TO_PYTHON_EXECUTABLE}" -m pip install ${PACKAGE_NAME}
    

    where ${PACKAGE_NAME} is (obviously) the package name.
    Note that sometimes, due to special conditions (like local PIP repositories configuration, ...), the installation would have to be done in 2 steps:

    1. Download the .whl locally

    2. Pass it to PIP (in order to install it)

    as described in [SO]: Installing pygraphviz on Windows 10 64-bit, Python 3.6 (@CristiFati's answer) (Shortcut section (somewhere at the end)).

    ${PATH_TO_PYTHON_EXECUTABLE} (using (initially) v3.9 as an example) can be (from my machines):

    When not sure about an executable location (actually not limited to executables), that can be checked:

    Might also worth reading:

    To test whether a module is installed use:

    python -m pip freeze
    

    or (per discussion above):

    "${PATH_TO_PYTHON_EXECUTABLE}" -m pip freeze
    

    and search command output for the specified module.

    Note that the same principle also applies to Nix.