Unpacking Software Livestream

Join our monthly Unpacking Software livestream to hear about the latest news, chat and opinion on packaging, software deployment and lifecycle management!

Learn More

Chocolatey Product Spotlight

Join the Chocolatey Team on our regular monthly stream where we put a spotlight on the most recent Chocolatey product releases. You'll have a chance to have your questions answered in a live Ask Me Anything format.

Learn More

Chocolatey Coding Livestream

Join us for the Chocolatey Coding Livestream, where members of our team dive into the heart of open source development by coding live on various Chocolatey projects. Tune in to witness real-time coding, ask questions, and gain insights into the world of package management. Don't miss this opportunity to engage with our team and contribute to the future of Chocolatey!

Learn More

Calling All Chocolatiers! Whipping Up Windows Automation with Chocolatey Central Management

Webinar from
Wednesday, 17 January 2024

We are delighted to announce the release of Chocolatey Central Management v0.12.0, featuring seamless Deployment Plan creation, time-saving duplications, insightful Group Details, an upgraded Dashboard, bug fixes, user interface polishing, and refined documentation. As an added bonus we'll have members of our Solutions Engineering team on-hand to dive into some interesting ways you can leverage the new features available!

Watch On-Demand
Chocolatey Community Coffee Break

Join the Chocolatey Team as we discuss all things Community, what we do, how you can get involved and answer your Chocolatey questions.

Watch The Replays
Chocolatey and Intune Overview

Webinar Replay from
Wednesday, 30 March 2022

At Chocolatey Software we strive for simple, and teaching others. Let us teach you just how simple it could be to keep your 3rd party applications updated across your devices, all with Intune!

Watch On-Demand
Chocolatey For Business. In Azure. In One Click.

Livestream from
Thursday, 9 June 2022

Join James and Josh to show you how you can get the Chocolatey For Business recommended infrastructure and workflow, created, in Azure, in around 20 minutes.

Watch On-Demand
The Future of Chocolatey CLI

Livestream from
Thursday, 04 August 2022

Join Paul and Gary to hear more about the plans for the Chocolatey CLI in the not so distant future. We'll talk about some cool new features, long term asks from Customers and Community and how you can get involved!

Watch On-Demand
Hacktoberfest Tuesdays 2022

Livestreams from
October 2022

For Hacktoberfest, Chocolatey ran a livestream every Tuesday! Re-watch Cory, James, Gary, and Rain as they share knowledge on how to contribute to open-source projects such as Chocolatey CLI.

Watch On-Demand

Downloads:

32

Downloads of v 25.0-b7:

4

Last Update:

15 May 2025

Package Maintainer(s):

Software Author(s):

  • Python Software Foundation

Tags:

pymanager python programming development foss cross-platform

Python Install Manager

This is a prerelease version of Python Install Manager.

  • 1
  • 2
  • 3

25.0-b7 | Updated: 15 May 2025

Downloads:

32

Downloads of v 25.0-b7:

4

Maintainer(s):

Software Author(s):

  • Python Software Foundation

Python Install Manager 25.0-b7

This is a prerelease version of Python Install Manager.

Legal Disclaimer: Neither this package nor Chocolatey Software, Inc. are affiliated with or endorsed by Python Software Foundation. The inclusion of Python Software Foundation trademark(s), if any, upon this webpage is solely to identify Python Software Foundation goods or services and not for commercial purposes.

  • 1
  • 2
  • 3

Some Checks Have Failed or Are Not Yet Complete

Not All Tests Have Passed


Validation Testing Passed


Verification Testing Failed

Details

Scan Testing Successful:

No detections found in any package files

Details
Learn More

Deployment Method: Individual Install, Upgrade, & Uninstall

To install Python Install Manager, run the following command from the command line or from PowerShell:

>

To upgrade Python Install Manager, run the following command from the command line or from PowerShell:

>

To uninstall Python Install Manager, run the following command from the command line or from PowerShell:

>

Deployment Method:

NOTE

This applies to both open source and commercial editions of Chocolatey.

1. Enter Your Internal Repository Url

(this should look similar to https://community.chocolatey.org/api/v2/)


2. Setup Your Environment

1. Ensure you are set for organizational deployment

Please see the organizational deployment guide

2. Get the package into your environment

  • Open Source or Commercial:
    • Proxy Repository - Create a proxy nuget repository on Nexus, Artifactory Pro, or a proxy Chocolatey repository on ProGet. Point your upstream to https://community.chocolatey.org/api/v2/. Packages cache on first access automatically. Make sure your choco clients are using your proxy repository as a source and NOT the default community repository. See source command for more information.
    • You can also just download the package and push it to a repository Download

3. Copy Your Script

choco upgrade pymanager -y --source="'INTERNAL REPO URL'" --prerelease [other options]

See options you can pass to upgrade.

See best practices for scripting.

Add this to a PowerShell script or use a Batch script with tools and in places where you are calling directly to Chocolatey. If you are integrating, keep in mind enhanced exit codes.

If you do use a PowerShell script, use the following to ensure bad exit codes are shown as failures:


choco upgrade pymanager -y --source="'INTERNAL REPO URL'" --prerelease
$exitCode = $LASTEXITCODE

Write-Verbose "Exit code was $exitCode"
$validExitCodes = @(0, 1605, 1614, 1641, 3010)
if ($validExitCodes -contains $exitCode) {
  Exit 0
}

Exit $exitCode

- name: Install pymanager
  win_chocolatey:
    name: pymanager
    version: '25.0-b7'
    source: INTERNAL REPO URL
    state: present
    allow_prerelease: yes

See docs at https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html.


chocolatey_package 'pymanager' do
  action    :install
  source   'INTERNAL REPO URL'
  version  '25.0-b7'
  options  '--prerelease'
end

See docs at https://docs.chef.io/resource_chocolatey_package.html.


cChocoPackageInstaller pymanager
{
    Name        = "pymanager"
    Version     = "25.0-b7"
    Source      = "INTERNAL REPO URL"
    chocoParams = "--prerelease"
}

Requires cChoco DSC Resource. See docs at https://github.com/chocolatey/cChoco.


package { 'pymanager':
  ensure          => '25.0-b7',
  install_options => ['--prerelease'],
  provider        => 'chocolatey',
  source          => 'INTERNAL REPO URL',
}

Requires Puppet Chocolatey Provider module. See docs at https://forge.puppet.com/puppetlabs/chocolatey.


4. If applicable - Chocolatey configuration/installation

See infrastructure management matrix for Chocolatey configuration elements and examples.

WARNING

This package is exempt from moderation. While it is likely safe for you, there is more risk involved.

Description

The Python install manager helps you to install, manage, and launch Python on Windows.

After install, the "py" command is your tool of choice - try "py help" to see what it can do! (Not working? You may need to uninstall the old "Python launcher", and check "Manage app execution aliases" to ensure the command is enabled.)

Complete documentation is available at http://docs.python.org/3.14/using/windows

Package Parameters

  • /GlobalShortcuts: - Choose if the global shortcuts directory should be added to PATH. By default, global shortcuts are added to machine or user PATH depending on choco's elevation status. Accepted options are:
    • /GlobalShortcuts:Machine - Add global shortcuts directory to PATH in Machine Variables.
    • /GlobalShortcuts:User - Add global shortcuts directory to PATH in User Variables.
    • /GlobalShortcuts:Disabled - Disable addition of global shortcuts directory to PATH.
  • /SkipMaxPathLimitationRemoval - By default, the package removes Windows's MAX_PATH limitation. This parameter can be provided to skip that step.

These parameters can be passed to the installer with the use of --params.
For example: --params "'/GlobalShortcuts:Machine /SkipMaxPathLimitationRemoval'"


legal\LICENSE.txt
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
--------------------------------------------

1. This LICENSE AGREEMENT is between the Python Software Foundation
("PSF"), and the Individual or Organization ("Licensee") accessing and
otherwise using this software ("Python") in source or binary form and
its associated documentation.

2. Subject to the terms and conditions of this License Agreement, PSF hereby
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
analyze, test, perform and/or display publicly, prepare derivative works,
distribute, and otherwise use Python alone or in any derivative version,
provided, however, that PSF's License Agreement and PSF's notice of copyright,
i.e., "Copyright (c) 2001 Python Software Foundation; All Rights Reserved"
are retained in Python alone or in any derivative version prepared by Licensee.

3. In the event Licensee prepares a derivative work that is based on
or incorporates Python or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python.

4. PSF is making Python available to Licensee on an "AS IS"
basis.  PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED.  BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.

5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.

7. Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between PSF and
Licensee.  This License Agreement does not grant permission to use PSF
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.

8. By copying, installing or otherwise using Python, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.
legal\VERIFICATION.txt
VERIFICATION
Verification is intended to assist the Chocolatey moderators and community
in verifying that this package's contents are trustworthy.

The embedded software have been downloaded from the listed download
location at <https://www.python.org/ftp/python/pymanager/pymanager.appinstaller>
and can be verified by doing the following:

1. Download the following:
  64-Bit software: <https://www.python.org/ftp/python/pymanager/python-manager-25.0b7.msix>
2. Get the checksum using one of the following methods:
  - Using powershell function 'Get-FileHash'
  - Use chocolatey utility 'checksum.exe'
3. The checksums should match the following:

  checksum type: sha256
  checksum64: 5EC1B0CD54F464C7CB0554CB959FF219B537B3164639EAEA842B7B5D043BFE3A

The file 'LICENSE.txt' has been obtained from <https://raw.githubusercontent.com/python/pymanager/0e1613626a5bb5829cba787da35b45843ec0303a/LICENSE>
tools\chocolateyInstall.ps1
$ErrorActionPreference = 'Stop'

$toolsPath = Split-Path $MyInvocation.MyCommand.Definition
. "$toolsPath/helpers.ps1"

$pp = Get-PackageParameters

$filePath    = "$toolsPath\python-manager-25.0b7.msix"
$appxVersion = '25.0.183.0'

if ([Environment]::OSVersion.Version.Major -ne '10') {
    throw 'This package requires Windows 10 or 11.'
}
if ([Environment]::OSVersion.Version.Build -lt '17763') {
    throw 'This package requires at least Windows 10 version 1809/OS build 17763.x.'
}

$processHasAdminRights = Test-ProcessAdminRights
$addGlobalShortcuts = $true
switch ($pp.GlobalShortcuts) {
    '' {
        if ($processHasAdminRights) {
            $pathType = [System.EnvironmentVariableTarget]::Machine
            Write-Host (
                'Admin rights available, will try to add global shortcuts to' +
                ' PATH in Machine Variables.'
            )
        } else {
            $pathType = [System.EnvironmentVariableTarget]::User
            Write-Host (
                'Admin rights available, will try to add global shortcuts to' +
                ' PATH in User Variables.'
            )
        }
    }
    'Machine' {
        $pathType = [System.EnvironmentVariableTarget]::Machine
    }
    'User' {
        $pathType = [System.EnvironmentVariableTarget]::User
    }
    'Disabled' {
        $addGlobalShortcuts = $false
    }
    default {
        throw (
            'Unknown value of /GlobalShortcuts parameter, supported options are:' +
            ' Machine, User, Disabled'
        )
    }
}

if ([Environment]::OSVersion.Version.Build -lt '18956') {
    # See https://github.com/Jackenmen/choco-auto/issues/13
    # Ref for the build number:
    # https://blogs.windows.com/windows-insider/2019/08/07/announcing-windows-10-insider-preview-build-18956/
    Write-Warning (
        'Windows builds before 18956 do not have sideloading enabled by default.' +
        ' The script will try to enable it automatically but this may fail,' +
        ' if admin rights ar not available.'
    )
    Set-AllowAllTrustedApps
}

Install-PyManager -FilePath $filePath -Version $appxVersion -Provision:$processHasAdminRights

if ($addGlobalShortcuts) {
    Add-GlobalShortcutsToPath $pathType
}

if ($pp.SkipMaxPathLimitationRemoval) {
    Write-Host (
        'NOT removing MAX_PATH limitation due to presence of' +
        ' /SkipMaxPathLimitationRemoval parameter.'
    )
} elseif ($processHasAdminRights) {
    Remove-MaxPathLimitation
} else {
    Write-Warning 'Could not remove MAX_PATH limitation due to lack of admin rights.'
}
tools\chocolateyUninstall.ps1
$ErrorActionPreference = 'Stop'

$toolsPath = Split-Path $MyInvocation.MyCommand.Definition
. "$toolsPath/helpers.ps1"

$processHasAdminRights = Test-ProcessAdminRights

Uninstall-PyManager -IsProvisioned:$processHasAdminRights
tools\helpers.ps1
$Script:appxPackageName = 'PythonSoftwareFoundation.PythonManager'
$Script:appxPublisherId = '3847v3x7pw1km'

function Set-AllowAllTrustedApps {
    # NOTE: This does not affect the "Allow all trusted apps to install" group policy
    # and the package will properly fail to install, if that policy is configured to
    # "Disabled" setting. We don't want to alter administrator's explicit decision,
    # just the default behavior seen in earlier builds.
    $registryEntry = @{
        Path         = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock'
        Name         = 'AllowAllTrustedApps'
        Value        = 1
        PropertyType = 'DWORD'
        Force        = $true
    }
    New-ItemProperty @registryEntry | Out-Null
    Write-Host 'Applied app sideloading behavior as seen in build 18956 and above.'
}

function Install-PyManager {
    param(
        [string] $FilePath,
        [string] $Version,
        [switch] $Provision = $true
    )

    $foundAppxPackage = $null

    if ($Provision) {
        $appxPackages = Get-AppxProvisionedPackage -Online | Where-Object {
            $_.DisplayName -eq $Script:appxPackageName
        }
    } else {
        $appxPackages = Get-AppxPackage -Name $Script:appxPackageName
    }

    foreach ($appxPackage in $appxPackages) {
        if ($Provision) {
            $appxPackageName = $appxPackage.PackageName
        } else {
            $appxPackageName = $appxPackage.PackageFullName
        }
        if (!$appxPackageName.EndsWith("__$Script:appxPublisherId")) {
            if ($env:ChocolateyForce) {
                Write-Host (
                    "Removing already installed Python Install Manager from a different publisher" +
                    " (${appxPackageName}) first"
                )
                if ($Provision) {
                    Remove-AppxProvisionedPackage -Online -AllUsers -PackageName $appxPackageName
                }
                Remove-AppxPackage -AllUsers:$Provision -Package $appxPackageName
                continue
            }
            throw (
                "The $Script:appxPackageName package from a different publisher is already provisioned:`n" +
                "${appxPackageName}`n" +
                "This may be a Store package or a development build.`n" +
                "This Chocolatey package uses MSIX from Python.org which cannot be provisioned" +
                " side-by-side with other variants."
            )
        }
        if ($foundAppxPackage -ne $null) {
            throw 'Unreachable error: found multiple packages from same publisher?'
        }
        $foundAppxPackage = $appxPackage
    }
    if ($Provision) {
        $appxPackages = Get-AppxPackage -Name $Script:appxPackageName
        foreach ($appxPackage in $appxPackages) {
            if (!$appxPackageName.EndsWith("__$Script:appxPublisherId")) {
                Write-Warning (
                    "Current user already has the $Script:appxPackageName installed" +
                    " from a different publisher. This may be a Store package" +
                    " or a development build. It is recommended to uninstall that variant"
                    " to allow this package to receive updates."
                )
            }
        }
    }

    [version]$foundVersion = $foundAppxPackage.Version
    if ($foundAppxPackage -eq $null) {
        # pymanager isn't already installed
    } elseif ($env:ChocolateyForce) {
        # you can't install the same version of an appx package, you need to remove it first
        Write-Host (
            "Removing already installed version ($foundVersion)" +
            " of Python Install Manager first."
        )
        Uninstall-PyManager -IsProvisioned:$Provision
    } elseif ($foundVersion -gt [version]$Version) {
        Write-Warning (
            "The version of Python Install Manager in this Chocolatey package ($Version)" +
            " is older than the already installed version ($foundVersion)." +
            " The application may have auto-updated."
        )
        Write-Host 'MSIX installation will not be performed.'
        return
    } elseif ($foundVersion -Match [version]$Version) {
        if ($env:ChocolateyForce) {
            # you can't install the same version of an appx package, you need to remove it first
            Write-Host (
                "Removing already installed version ($foundVersion)" +
                " of Python Install Manager first."
            )
            Uninstall-PyManager -IsProvisioned:$Provision
        } else {
            Write-Host "Python Install Manager $Version is already installed."
            return
        }
    }

    if ($Provision) {
        Add-AppxProvisionedPackage -Online -SkipLicense -PackagePath $FilePath
    } else {
        Add-AppxPackage $FilePath
    }
    Write-Host
}

function Uninstall-PyManager {
    param([switch]$IsProvisioned = $true)

    $provisionedAppxPackages = $null
    if ($IsProvisioned) {
        $provisionedAppxPackages = Get-AppxProvisionedPackage -Online | Where-Object {
            $_.DisplayName -eq $Script:appxPackageName -and $_.PackageName.EndsWith("__$Script:appxPublisherId")
        }
        $provisionedAppxPackages | Remove-AppxProvisionedPackage -Online -AllUsers
    } else {
        $appxPackages = Get-AppxPackage -Name $Script:appxPackageName | Where-Object {
            $_.PackageFullName.EndsWith("__$Script:appxPublisherId")
        }
        $appxPackages | Remove-AppxPackage
    }

    if ($provisionedAppxPackages -eq $null -and $appxPackages -eq $null) {
        Write-Warning "$Script:appxPackageName has already been uninstalled through other means."
        return
    }
}

function Add-GlobalShortcutsToPath {
    param([System.EnvironmentVariableTarget] $PathType)

    $pathEntry = '%USERPROFILE%\AppData\Local\Python\bin'
    $actualPath = Get-EnvironmentVariable -Name 'Path' -Scope $PathType -PreserveVariables

    if ($actualPath -eq $null) {
        throw "Could not get PATH from $PathType Variables."
    }

    if ($actualPath -Split ';' -Contains $pathEntry) {
        Write-Host "$pathEntry PATH entry is already part of $PathType Variables."
        return
    }
    $pathToInstall = $pathEntry
    if (!$actualPath.StartsWith(';')) {
        $pathToInstall = "$pathToInstall;"
    }
    $newPath = $pathToInstall + $actualPath
    if (!$newPath.EndsWith(';')) {
        $newPath = "$newPath;"
    }
    Install-ChocolateyEnvironmentVariable `
        -VariableName 'Path' -VariableValue $newPath -VariableType $PathType
    Write-Host "Added $pathEntry as PATH entry in $PathType Variables."
}

function Remove-MaxPathLimitation {
    $registryEntry = @{
        Path         = 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem'
        Name         = 'LongPathsEnabled'
        Value        = 1
        PropertyType = 'DWORD'
        Force        = $true
    }
    New-ItemProperty @registryEntry | Out-Null
    Write-Host 'Removed the MAX_PATH limitation'
}
tools\python-manager-25.0b7.msix
md5: CC5B2CDE5873286E78E6F27E0EA11830 | sha1: D70564670A73340D073925FED93A6A4AD3212292 | sha256: 5EC1B0CD54F464C7CB0554CB959FF219B537B3164639EAEA842B7B5D043BFE3A | sha512: 095AA83AF30018FD23CAC9C151ACE197EAE52BC78B826DA3733C48FD7D9C753B219947D28383F84F658FB45B2290D6CFE36704526C55721006CA9DD727DF82A3

Log in or click on link to see number of positives.

In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).

Chocolatey Pro provides runtime protection from possible malware.

Add to Builder Version Downloads Last Updated Status
Python Install Manager 25.0-b7 4 Thursday, May 15, 2025 Exempted
Python Install Manager 25.0-b5 9 Friday, May 9, 2025 Exempted

This package has no dependencies.

Discussion for the Python Install Manager Package

Ground Rules:

  • This discussion is only about Python Install Manager and the Python Install Manager package. If you have feedback for Chocolatey, please contact the Google Group.
  • This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
  • The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
  • Tell us what you love about the package or Python Install Manager, or tell us what needs improvement.
  • Share your experiences with the package, or extra configuration or gotchas that you've found.
  • If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.
comments powered by Disqus