Skip to content

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 pip uninstall pip -y
> python -m ensurepip
Normally 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:

Comments