Install Python on Windows with Powershell without administrator privileges#
As a Windows DevOps, I often use Powershell and Python, Powershell is installed by Windows out of box, but this is not for Python. And for my working environment, I don't have the administrator privileges on some servers. I will show you in this post how to rapidly deploy Python on Windows as a standard user by using Powershell with Nuget.
Update 2019-12-30 Installing Python by Scoop#
Installing Python on Windows by Scoop is the simplest way so far if you have Internet access.
To switch between different Python versions, please check this doc.
Finding Python packages#
If you cannot use Find-Package to search pacakges in Nuget repository, please check my post on Setting Up Nuget for Powershell.
We will install python
with version 3.6.5 and python2
with version 2.7.15.
> Find-Package python*
Name Version Source Summary
---- ------- ------ -------
python 3.6.5 Nuget Installs 64-bit Python for use in build scenarios.
python-embed 3.6.1.1 Nuget Installs 64-bit Python for use in build scenarios a...
python2x86 2.7.15 Nuget Installs 32-bit Python 2.7 for use in build scenarios.
python2 2.7.15 Nuget Installs 64-bit Python 2.7 for use in build scenarios.
Python35 3.5.1.1 Nuget Python 3.5 API
Python36 3.6.0 Nuget Python 3.6 API
pythonAndroid-2.7-x86_64-22... 1.0.0.7 Nuget Python 2.7 android api version: 22.0.0 architecture... pythonAndroid-2.7-armeabi-v... 1.0.0.7 Nuget Python 2.7 android api version: 22.0.0 architecture... pythonAndroid-2.7-x86_64-23... 1.0.0.7 Nuget Python 2.7 android api version: 23.0.0 architecture...
Python27Dev 2.7.13 Nuget Python 2.7 unofficial dev environment package
pythonIOS-2.7-arm64-10.3 1.0.0.7 Nuget Python 2.7 iOS api version: 10.3 architecture: arm64
PythonPlotter 0.2.15 Nuget Package to allow use of matplotlib from .NET....
Python.Runtime 2.7.9 Nuget Python 2.7.9 as a single, stand-alone executable wi...
PythonLibs4CSharp 1.0.0 Nuget A collection of Iron Python compiled libraries with...
pythonx86 3.6.5 Nuget Installs 32-bit Python for use in build scenarios.
pythonnet_py35_dotnet 2.3.0 Nuget Python 3.5 and .NET Framework
pythonnet_py27_dotnet 2.3.0 Nuget Python 2.7 and .NET Framework
Python27 2.7.6 Nuget Python 2.7 API
PythonConsoleControl 1.0.1 Nuget PythonConsole
Python3 3.6.3.2 PSGallery Python3 interpreter
PythonSelect 1.0.0 PSGallery Select a Python distribution to use within a PowerS...
PythonConverter.dll 1.0.0 Nuget Package description
Installing Python#
# To install Python 3
> Install-Package python -Scope CurrentUser
# To install Python 2
> Install-Package python2 -Scope CurrentUser
Note 2018-08-29:
Warning
Current Find-Package python* -AllVersion
gives the lastest python version is v3.7.0
, but this version doesn't work, the last worked Nuget python version is v3.6.6
Adding Python to user path#
I will show you the way to add Python3 into the user PATH, it will be the same way for Python2. I use the user PATH because I'm not admin on the Windows server, I cannot modify the system PATH.
# Get python3 package info path
> Get-Package python | % source
C:\Users\xiang\AppData\Local\
# For Nuget packages, the executable is always under the tools folder, and the tools folder is at the same level as .nupkg file.
> ls C:\Users\xiang\AppData\Local\PackageManagement\NuGet\Packages\python.3.6.5\tools\
Directory: C:\Users\xiang\AppData\Local\PackageManagement\NuGet\Packages\python.3.6.5\tools
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2018-06-26 00:15 DLLs
d----- 2018-06-26 00:15 include
d----- 2018-06-26 00:16 Lib
d----- 2018-06-26 00:15 libs
d----- 2018-06-26 00:49 Scripts
d----- 2018-06-26 00:15 Tools
-a---- 2018-03-28 17:10 100504 python.exe
-a---- 2018-03-28 17:10 58520 python3.dll
-a---- 2018-03-28 17:10 3610776 python36.dll
-a---- 2018-03-28 17:10 98968 pythonw.exe
-a---- 2018-03-28 17:10 88752 vcruntime140.dll
# python needs to add 2 paths to the user PATH, one is the root folder containing python.exe, another is the Sripts folder.
> $pythonRootFolder = Join-Path (Split-Path (Get-Package python | % source)) "tools"
> $pythonScriptsFolder = Join-Path $pythonRootFolder "Scripts"
> $path = [System.Environment]::GetEnvironmentVariable('path', 'user')
> $path += ";$pythonRootFolder"
> $path += ";$pythonScriptsFolder;"
> [System.Environment]::SetEnvironmentVariable('path', $path, 'user')
Reinstalling pip#
The default pip3.exe and pip2.exe have some strange behavior that just don't work :
> pip3
Fatal error in launcher: Unable to create process using '"'
> pip2
Fatal error in launcher: Unable to create process using '"'
You can bypass the issue by using python -m pip
, but I like to use pip directly without python -m
, the trick is just reinstalling the pip:
python -m ensurepip
will install pip v9, if you want to install pip v10, just upgrade the v9: > pip3 --version
pip 9.0.3 from c:\users\xiang\appdata\local\packagemanagement\nuget\packages\python.3.6.5\tools\lib\site-packages (python 3.6)
> python -m pip install -U pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 9.0.3
Uninstalling pip-9.0.3:
Successfully uninstalled pip-9.0.3
Successfully installed pip-10.0.1
> pip3 --version
pip 10.0.1 from c:\users\xiang\appdata\local\packagemanagement\nuget\packages\python.3.6.5\tools\lib\site-packages\pip (python 3.6)
And we can find that when installing pip v10, the pip.exe is installed too, while in pip v9, we only have pip3.exe.
> ls C:\Users\xiang\AppData\Local\PackageManagement\NuGet\Packages\python.3.6.5\tools\Scripts\
Directory: C:\Users\xiang\AppData\Local\PackageManagement\NuGet\Packages\python.3.6.5\tools\Scripts
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018-03-28 17:10 98187 easy_install-3.6.exe
-a---- 2018-06-26 00:49 102812 pip.exe
-a---- 2018-06-26 00:49 102812 pip3.6.exe
-a---- 2018-06-26 00:49 102812 pip3.exe
-a---- 2018-06-26 00:29 98224 ptipython.exe
-a---- 2018-06-26 00:29 98224 ptipython3.exe
-a---- 2018-06-26 00:29 98223 ptpython.exe
-a---- 2018-06-26 00:29 98223 ptpython3.exe
-a---- 2018-06-26 00:29 98207 pygmentize.exe
Update on 2018-07-27:
Note
The pip version has been jumped from v10 to v18
directly, because PyPA switches the software versioning to CalVer
Configuring pip for PyPI#
If you're in enterprise environment, you may probably dont have access to the public Python packages repository https://pypi.org/, and in this case, your enterprise should have a local Artifactory which mirrors the public https://pypi.org/. So you need to add your enterprise Artifactory PyPI URL to you Python pip conf.
You can find all the pip configuration details here.
For JFrog Artifactory: