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:
as you can see from the version, pip install
would still install new packages for python 3.7
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 install
ing (especially when involving VEnvs):
Run PIP directly - most frequently used:
pip install --upgrade pyaudio
Run python -m pip
:
python -m pip install --upgrade pyaudio
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:
Download the .whl locally
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):
Win:
%ProgramFiles%\Python 3.9\python.exe
E:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe
F:\Install\pc064\Anaconda\Anaconda\Version\python.exe
Nix:
/usr/bin/python3.9
/usr/local/pc032/python/python/3.10.13/bin/python
/opt/qti-aic/dev/python/qaic-env/bin/python
When not sure about an executable location (actually not limited to executables), that can be checked:
Win: [MS.Docs]: where (where /?
)
Nix: [Die.Linux]: which(1) (man which
).
Worth mentioning aliases: [Man7]: ALIAS(1P) (man alias
)
Might also worth reading:
[SO]: PyCharm doesn't recognize installed module (@CristiFati's answer)
[SO]: How to update pywin32 automatically? (@CristiFati's answer)
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.