Python Development Workflow for Humans.

Overview

Pipenv: Python Development Workflow for Humans

image image Azure Pipelines Build Status image


[ ~ Dependency Scanning by PyUp.io ~ ]

Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world. Windows is a first-class citizen, in our world.

It automatically creates and manages a virtualenv for your projects, as well as adds/removes packages from your Pipfile as you install/uninstall packages. It also generates the ever-important Pipfile.lock, which is used to produce deterministic builds.

GIF demonstrating Pipenv's usage

The problems that Pipenv seeks to solve are multi-faceted:

  • You no longer need to use pip and virtualenv separately. They work together.
  • Managing a requirements.txt file can be problematic, so Pipenv uses the upcoming Pipfile and Pipfile.lock instead, which is superior for basic use cases.
  • Hashes are used everywhere, always. Security. Automatically expose security vulnerabilities.
  • Give you insight into your dependency graph (e.g. $ pipenv graph).
  • Streamline development workflow by loading .env files.

You can quickly play with Pipenv right in your browser:

Try in browser

Installation

If you're using Debian Buster+:

$ sudo apt install pipenv

Or, if you're using Fedora:

$ sudo dnf install pipenv

Or, if you're using FreeBSD:

# pkg install py36-pipenv

When none of the above is an option, it is recommended to use Pipx:

$ pipx install pipenv

Otherwise, refer to the documentation for instructions.

✨ 🍰 ✨

☤ User Testimonials

David Gang---

: This package manager is really awesome. For the first time I know exactly what my dependencies are which I installed and what the transitive dependencies are. Combined with the fact that installs are deterministic, makes this package manager first class, like cargo.

Justin Myles Holmes---

: Pipenv is finally an abstraction meant to engage the mind instead of merely the filesystem.

☤ Features

  • Enables truly deterministic builds, while easily specifying only what you want.
  • Generates and checks file hashes for locked dependencies.
  • Automatically install required Pythons, if pyenv is available.
  • Automatically finds your project home, recursively, by looking for a Pipfile.
  • Automatically generates a Pipfile, if one doesn't exist.
  • Automatically creates a virtualenv in a standard location.
  • Automatically adds/removes packages to a Pipfile when they are un/installed.
  • Automatically loads .env files, if they exist.

The main commands are install, uninstall, and lock, which generates a Pipfile.lock. These are intended to replace $ pip install usage, as well as manual virtualenv management (to activate a virtualenv, run $ pipenv shell).

Basic Concepts

  • A virtualenv will automatically be created, when one doesn't exist.
  • When no parameters are passed to install, all packages [packages] specified will be installed.
  • To initialize a Python 3 virtual environment, run $ pipenv --three.
  • To initialize a Python 2 virtual environment, run $ pipenv --two.
  • Otherwise, whatever virtualenv defaults to will be the default.

Other Commands

  • shell will spawn a shell with the virtualenv activated.
  • run will run a given command from the virtualenv, with any arguments forwarded (e.g. $ pipenv run python).
  • check asserts that PEP 508 requirements are being met by the current environment.
  • graph will print a pretty graph of all your installed dependencies.

Shell Completion

For example, with fish, put this in your ~/.config/fish/completions/pipenv.fish:

eval (pipenv --completion)

Alternatively, with bash, put this in your .bashrc or .bash_profile:

eval "$(pipenv --completion)"

Magic shell completions are now enabled! There is also a fish plugin, which will automatically activate your subshells for you!

Fish is the best shell. You should use it.

☤ Usage

$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where          Output project home information.
  --venv           Output virtualenv information.
  --py             Output Python interpreter information.
  --envs           Output Environment Variable options.
  --rm             Remove the virtualenv.
  --bare           Minimal output.
  --completion     Output completion (to be eval'd).
  --man            Display manpage.
  --three / --two  Use Python 3/2 when creating virtualenv.
  --python TEXT    Specify which version of Python virtualenv should use.
  --site-packages  Enable site-packages for the virtualenv.
  --version        Show the version and exit.
  -h, --help       Show this message and exit.


Usage Examples:
   Create a new project using Python 3.7, specifically:
   $ pipenv --python 3.7

   Remove project virtualenv (inferred from current directory):
   $ pipenv --rm

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

Commands:
  check      Checks for security vulnerabilities and against PEP 508 markers
             provided in Pipfile.
  clean      Uninstalls all packages not specified in Pipfile.lock.
  graph      Displays currently–installed dependency graph information.
  install    Installs provided packages and adds them to Pipfile, or (if no
             packages are given), installs all packages from Pipfile.
  lock       Generates Pipfile.lock.
  open       View a given module in your editor.
  run        Spawns a command installed into the virtualenv.
  scripts    Displays the shortcuts in the (optional) [scripts] section of 
             Pipfile. 
  shell      Spawns a shell within the virtualenv.
  sync       Installs all packages specified in Pipfile.lock.
  uninstall  Un-installs a provided package and removes it from Pipfile.

Locate the project:

$ pipenv --where
/Users/kennethreitz/Library/Mobile Documents/com~apple~CloudDocs/repos/kr/pipenv/test

Locate the virtualenv:

$ pipenv --venv
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre

Locate the Python interpreter:

$ pipenv --py
/Users/kennethreitz/.local/share/virtualenvs/test-Skyy4vre/bin/python

Install packages:

$ pipenv install
Creating a virtualenv for this project...
...
No package provided, installing all dependencies.
Virtualenv location: /Users/kennethreitz/.local/share/virtualenvs/test-EJkjoYts
Installing dependencies from Pipfile.lock...
...

To activate this project's virtualenv, run the following:
$ pipenv shell

Installing from git:

You can install packages with pipenv from git and other version control systems using URLs formatted according to the following rule:

<vcs_type>+<scheme>://<location>/<user_or_organization>/<repository>@<branch_or_tag>#<package_name>

The only optional section is the @<branch_or_tag> section. When using git over SSH, you may use the shorthand vcs and scheme alias git+git@<location>:<user_or_organization>/<repository>@<branch_or_tag>#<package_name>. Note that this is translated to git+ssh://git@<location> when parsed.

Valid values for <vcs_type> include git, bzr, svn, and hg. Valid values for <scheme> include http,, https, ssh, and file. In specific cases you also have access to other schemes: svn may be combined with svn as a scheme, and bzr can be combined with sftp and lp.

Note that it is strongly recommended that you install any version-controlled dependencies in editable mode, using pipenv install -e, in order to ensure that dependency resolution can be performed with an up to date copy of the repository each time it is performed, and that it includes all known dependencies.

Below is an example usage which installs the git repository located at https://github.com/requests/requests.git from tag v2.19.1 as package name requests:

$ pipenv install -e git+https://github.com/requests/[email protected]#egg=requests
Creating a Pipfile for this project...
Installing -e git+https://github.com/requests/[email protected]#egg=requests...
[...snipped...]
Adding -e git+https://github.com/requests/req[email protected]#egg=requests to Pipfile's [packages]...
[...]

You can read more about pip's implementation of vcs support here.

Install a dev dependency:

$ pipenv install pytest --dev
Installing pytest...
...
Adding pytest to Pipfile's [dev-packages]...

Show a dependency graph:

$ pipenv graph
requests==2.18.4
  - certifi [required: >=2017.4.17, installed: 2017.7.27.1]
  - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
  - idna [required: >=2.5,<2.7, installed: 2.6]
  - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]

Generate a lockfile:

$ pipenv lock
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
Note: your project now has only default [packages] installed.
To install [dev-packages], run: $ pipenv install --dev

Install all dev dependencies:

$ pipenv install --dev
Pipfile found at /Users/kennethreitz/repos/kr/pip2/test/Pipfile. Considering this to be the project home.
Pipfile.lock out of date, updating...
Assuring all dependencies from Pipfile are installed...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...

Uninstall everything:

$ pipenv uninstall --all
No package provided, un-installing all dependencies.
Found 25 installed package(s), purging...
...
Environment now purged and fresh!

Use the shell:

$ pipenv shell
Loading .env environment variables...
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ ▯

☤ Documentation

Documentation resides over at pipenv.pypa.io.

Comments
  • pipenv install is very slow

    pipenv install is very slow

    Running pipenv install after changing one dependency takes about ~5 minutes for me, on a windows 10 machine with an SSD.

    The vast majority of that time is spent inside Locking [packages] dependencies...

    It seems like there might be some quadratic-or-worse complexity in this step?

    I've included most of our pipfile below, but I had to remove some of our private repo dependencies:

    [[source]]
    url = "https://pypi.python.org/simple"
    verify_ssl = true
    
    [packages]
    alembic = "==0.8.4"
    amqp = "==1.4.7"
    analytics-python = "==1.2.5"
    anyjson = "==0.3.3"
    billiard = "==3.3.0.20"
    braintree = "==3.20.0"
    celery = "==3.1.18"
    coverage = "==4.0.3"
    docopt = "==0.4.0"
    eventlet = "==0.19.0"
    flake8 = "==3.0.4"
    Flask-Cors = "==2.1.2"
    Flask-Login = "==0.3.2"
    Flask = "==0.12.1"
    funcsigs = "==0.4"
    fuzzywuzzy = "==0.12.0"
    gcloud = "==0.14.0"
    html2text = "==2016.9.19"
    itsdangerous = "==0.24"
    Jinja2 = "==2.8"
    jsonpatch = "==1.15"
    jsonschema = "==2.5.1"
    PyJWT = "==1.4.2"
    kombu = "==3.0.30"
    LayerClient = "==0.1.9"
    MarkupSafe = "==0.23"
    mixpanel = "==4.3.0"
    mock = "==1.3.0"
    nose-exclude = "==0.4.1"
    nose = "==1.3.7"
    numpy = "==1.12.1"
    pdfrw = "==0.3"
    Pillow = "==4.1.0"
    pusher = "==1.6"
    pycountry = "==1.20"
    pycryptodome = "==3.4.5"
    pymongo = "==3.2"
    PyMySQL = "==0.7.4"
    python-dateutil = "<=2.5.1"
    python-Levenshtein = "==0.12.0"
    python-magic = "==0.4.6"
    python-coveralls = "==2.9.0"
    pytz = "==2015.6"
    raygun4py = "==3.1.2"
    "repoze.retry" = "==1.3"
    requests = "==2.8.1"
    sendgrid = "==2.2.1"
    slacker = "==0.7.3"
    SQLAlchemy-Enum34 = "==1.0.1"
    SQLAlchemy-Utils = "==0.31.6"
    SQLAlchemy = "==1.1.9"
    typing = "==3.5.2.2"
    twilio = "==5.6.0"
    Unidecode = "==0.4.19"
    voluptuous = "==0.8.11"
    Wand = "==0.4.4"
    watchdog = "==0.8.3"
    Werkzeug = "==0.12.1"
    wheel = "==0.24.0"
    WTForms = "==2.0.2"
    xmltodict = "==0.9.2"
    zeep = "==0.24.0"
    
    opened by Diggsey 108
  • 11.1.8+ broke pipenv lock/install of --dev -e .

    11.1.8+ broke pipenv lock/install of --dev -e .

    Sorry I don’t have the time for the full template dance, but I woke up to a broken pipenv update and could pinpoint it to:

    • pipenv install --dev -e .
    • pipenv lock if the Pipfile contains -e .
    • starting with 11.1.8

    This is what I get with latest pipenv on lock:

    Locking [dev-packages] dependencies…
    ate(resolver.resolve(max_rounds=PIPENV_MAX_ROUNDS))
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 102, in resolve
        has_changed, best_matches = self._resolve_one_round()
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 200, in _resolve_one_round
        for dep in self._iter_dependencies(best_match):
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 275, in _iter_dependencies
        for dependency in self.repository.get_dependencies(ireq):
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/repositories/pypi.py", line 182, in get_dependencies
        'Please run "$ pipenv-resolver {0!r} --verbose" to debug.'.format(str(ireq.req))
    ValueError: Your dependencies could not be resolved.
    Please run "$ pipenv-resolver 'None' --verbose" to debug.
    

    This is what I get with latest pipenv on pipenv install --dev -e . :

    Installing -e .…
    Obtaining file:///Users/hynek/tmp/t
    Installing collected packages: t
      Found existing installation: t 1.0
        Uninstalling t-1.0:
          Successfully uninstalled t-1.0
      Running setup.py develop for t
    Successfully installed t
    
    Adding -e . to Pipfile's [dev-packages]…
    Pipfile.lock not found, creating…
    Locking [dev-packages] dependencies…
    ate(resolver.resolve(max_rounds=PIPENV_MAX_ROUNDS))
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 102, in resolve
        has_changed, best_matches = self._resolve_one_round()
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 200, in _resolve_one_round
        for dep in self._iter_dependencies(best_match):
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/resolver.py", line 275, in _iter_dependencies
        for dependency in self.repository.get_dependencies(ireq):
      File "/Users/hynek/.local/venvs/pipenv/lib/python3.6/site-packages/pipenv/../pipenv/patched/piptools/repositories/pypi.py", line 182, in get_dependencies
        'Please run "$ pipenv-resolver {0!r} --verbose" to debug.'.format(str(ireq.req))
    ValueError: Your dependencies could not be resolved.
    Please run "$ pipenv-resolver 'None' --verbose" to debug.
    
    Type: Bug :bug: 
    opened by hynek 101
  • Updating only one locked dependency

    Updating only one locked dependency

    Sometimes I'm doing a PR and I want to update a specific dependency but I don't want to deal with updates of all my dependencies (aiohttp, flake8, etc…). If any breaking change was introduced in those dependencies, I want to deal with it in another PR.

    As far as I know, the only way to do that would be to pin all the dependencies that I don't want to update in the Pipfile. But I find it to defeat the purpose of Pipenv in the first place :) .

    So my feature request would be to be able to do something like:

    $ pipenv lock --only my-awesome-dep
    

    That would generate a Pipfile.lock with updates for only my-awesome-dep and its dependencies.

    I can probably make a PR for that, but I would like to get some feedback first.

    Type: Question :grey_question: 
    opened by k4nar 83
  • `pipenv install XYZ` command sometimes hangs indefinitely at

    `pipenv install XYZ` command sometimes hangs indefinitely at "Locking [packages] dependencies"

    Similar to these issues:

    • https://github.com/pypa/pipenv/issues/356
    • https://github.com/pypa/pipenv/issues/278
    Summary

    When using pipenv install XYZ, the process hangs indefinitely at "Locking [packages] dependencies".

    This doesn't happen every time, and may be related to which package is being installed. This morning it is happening every time I try to install tensorflow. Last night it was happening for numpy as well, but today numpy is fine.

    The hanged response seems to last indefinitely (though I did manually terminate the process after an hour). The Pipfile.lock is not written, but the Pipfile is written and the expected packages are installed and listed when I run pipenv run pip freeze.

    I was able to reproduce this using various permutations of:

    • (L)ubuntu 16.04 and (X)ubuntu 17.10
    • pipenv --three and pipenv --two
    • pipenv installed through python 2.7 and pipenv installed through python 3.5
    • ...and I downloaded the pipenv source and installed that in an isolated environment to see if the issue was specific to pipenv version 11.8.3. I experienced the same behavior in 11.9.0.

    I am also able to reproduce it by simply running pipenv lock or pipenv update if I have tensorflow (or whatever package is currently causing me trouble) listed in my Pipfile.

    $ python -m pipenv.help output

    Pipenv version: '11.8.3'

    Pipenv location: '/home/mary/.local/lib/python2.7/site-packages/pipenv'

    Python location: '/usr/bin/python'

    Other Python installations in PATH:

    • 2.7: /usr/bin/python2.7

    • 2.7: /usr/bin/python2.7

    • 3.5: /usr/bin/python3.5m

    • 3.5: /usr/bin/python3.5

    • 2.7.12: /usr/bin/python

    • 2.7.12: /usr/bin/python2

    • 3.5.2: /usr/bin/python3

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '0',
     'os_name': 'posix',
     'platform_machine': 'x86_64',
     'platform_python_implementation': 'CPython',
     'platform_release': '4.13.0-37-generic',
     'platform_system': 'Linux',
     'platform_version': '#42~16.04.1-Ubuntu SMP Wed Mar 7 16:03:28 UTC 2018',
     'python_full_version': '2.7.12',
     'python_version': '2.7',
     'sys_platform': 'linux2'}
    

    System environment variables:

    • MANDATORY_PATH
    • _LXSESSION_PID
    • XDG_GREETER_DATA_DIR
    • PROJECT_HOME
    • LC_CTYPE
    • PYTHONDONTWRITEBYTECODE
    • XDG_CURRENT_DESKTOP
    • XDG_SESSION_TYPE
    • LOGNAME
    • XDG_SEAT
    • PATH
    • XDG_VTNR
    • QT_PLATFORM_PLUGIN
    • PYTHONUNBUFFERED
    • VIRTUALENVWRAPPER_SCRIPT
    • ZSH
    • DISPLAY
    • SSH_AGENT_PID
    • LANG
    • TERM
    • SHELL
    • XDG_SESSION_PATH
    • XAUTHORITY
    • LANGUAGE
    • SHLVL
    • QT_LINUX_ACCESSIBILITY_ALWAYS_ON
    • QT_QPA_PLATFORMTHEME
    • SESSION_FOLDER
    • QT_ACCESSIBILITY
    • WINDOWID
    • LIBVIRT_DEFAULT_URI
    • HOME
    • XDG_SESSION_DESKTOP
    • SAL_USE_VCLPLUGIN
    • XDG_RUNTIME_DIR
    • WORKON_HOME
    • SSH_AUTH_SOCK
    • VTE_VERSION
    • GDMSESSION
    • VIRTUALENVWRAPPER_WORKON_CD
    • XDG_SEAT_PATH
    • PIP_PYTHON_PATH
    • XDG_SESSION_ID
    • DBUS_SESSION_BUS_ADDRESS
    • _
    • VIRTUALENVWRAPPER_HOOK_DIR
    • VIRTUALENVWRAPPER_PROJECT_FILENAME
    • DESKTOP_SESSION
    • LSCOLORS
    • XDG_CONFIG_DIRS
    • DEFAULTS_PATH
    • XDG_CONFIG_HOME
    • OLDPWD
    • LS_COLORS
    • GDM_LANG
    • XDG_DATA_DIRS
    • PWD
    • XDG_MENU_PREFIX
    • LESS
    • PAGER
    • USER

    Pipenv–specific environment variables:

    Debug–specific environment variables:

    • PATH: /home/mary/bin:/home/mary/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    • SHELL: /usr/bin/zsh
    • LANG: en_US.UTF-8
    • PWD: /home/mary/Development/Projects/poor_mans_smart_camera

    Contents of Pipfile ('/home/mary/Development/Projects/poor_mans_smart_camera/Pipfile'):

    [[source]]
    url = "https://pypi.python.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [dev-packages]
    
    [packages]
    numpy = "*"
    tensorflow = "*"
    
    [requires]
    python_version = "3.5"
    
    

    Expected result

    I expect the step in which the Pipfile.lock is generated to take at most a minute.

    I have good hardware with lots of free memory and processing power, so I don't think this is a resource constraint. My internet speed is 60 Mbps, so I doubt it is a networking issue when requesting packages.

    Actual result

    verbose_output.txt

    While this screenshot doesn't show verbose output like the file above, it does visually demonstrate what I am experiencing. image

    Steps to replicate
    1. Spin up new virtualenv using pipenv --three or pipenv --two.
    2. Confirm things are working as expected with a package you know is installing fine such as pipenv install pylint.
    3. Now cause it to hang by installing a package that is not working for whatever reason such as pipenv install tensorflow.

    Pipfile

    opened by MarenstainBear 78
  • Locking is slow (and performs redundant downloads)

    Locking is slow (and performs redundant downloads)

    Is this an issue with my installation? It happens on all of my machines... Is there anything I/we can do to speed it up?

    I install one package and the locking seems to take minutes.

    Locking [packages] dependencies…
    
    $ python -m pipenv.help output

    Pipenv version: '2018.05.18'

    Pipenv location: '/Users/colllin/miniconda3/lib/python3.6/site-packages/pipenv'

    Python location: '/Users/colllin/miniconda3/bin/python'

    Other Python installations in PATH:

    • 2.7: /usr/bin/python2.7

    • 2.7: /usr/bin/python2.7

    • 3.6: /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6m

    • 3.6: /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6

    • 3.6: /Users/colllin/miniconda3/bin/python3.6

    • 3.6: /Users/colllin/.pyenv/shims/python3.6

    • 3.6: /usr/local/bin/python3.6

    • 3.6.3: /Users/colllin/miniconda3/bin/python

    • 3.6.3: /Users/colllin/.pyenv/shims/python

    • 2.7.10: /usr/bin/python

    • 3.6.4: /Library/Frameworks/Python.framework/Versions/3.6/bin/python3

    • 3.6.3: /Users/colllin/miniconda3/bin/python3

    • 3.6.4: /Users/colllin/.pyenv/shims/python3

    • 3.6.4: /usr/local/bin/python3

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '3.6.3',
     'os_name': 'posix',
     'platform_machine': 'x86_64',
     'platform_python_implementation': 'CPython',
     'platform_release': '17.5.0',
     'platform_system': 'Darwin',
     'platform_version': 'Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST '
                         '2018; root:xnu-4570.51.1~1/RELEASE_X86_64',
     'python_full_version': '3.6.3',
     'python_version': '3.6',
     'sys_platform': 'darwin'}
    

    System environment variables:

    • TERM_PROGRAM
    • NVM_CD_FLAGS
    • TERM
    • SHELL
    • TMPDIR
    • Apple_PubSub_Socket_Render
    • TERM_PROGRAM_VERSION
    • TERM_SESSION_ID
    • NVM_DIR
    • USER
    • SSH_AUTH_SOCK
    • PYENV_VIRTUALENV_INIT
    • PATH
    • PWD
    • LANG
    • XPC_FLAGS
    • PS1
    • XPC_SERVICE_NAME
    • PYENV_SHELL
    • HOME
    • SHLVL
    • DRAM_ROOT
    • LOGNAME
    • NVM_BIN
    • SECURITYSESSIONID
    • _
    • __CF_USER_TEXT_ENCODING
    • PYTHONDONTWRITEBYTECODE
    • PIP_PYTHON_PATH

    Pipenv–specific environment variables:

    Debug–specific environment variables:

    • PATH: /Library/Frameworks/Python.framework/Versions/3.6/bin:/Users/colllin/miniconda3/bin:/Users/colllin/.pyenv/plugins/pyenv-virtualenv/shims:/Users/colllin/.pyenv/shims:/Users/colllin/.pyenv/bin:/Users/colllin/.nvm/versions/node/v8.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    • SHELL: /bin/bash
    • LANG: en_US.UTF-8
    • PWD: /Users/.../folder

    Contents of Pipfile ('/Users/.../Pipfile'):

    [[source]]
    url = "https://pypi.org/simple"
    verify_ssl = true
    name = "pypi"
    
    [packages]
    gym-retro = "*"
    
    [dev-packages]
    
    [requires]
    python_version = "3.6"
    
    
    Category: Future Category: Dependency Resolution Category: Performance 
    opened by colllin 76
  • Proposal: `pipenv` patterns and antipatterns for python library project

    Proposal: `pipenv` patterns and antipatterns for python library project

    Hacking maya I learned few lessons which resulted in my following proposal of recommended usage of pipenv in python libraries. I expect others to review the proposal and if we reach agreement, the (updated) text could end up in pipenv docs.

    pipenv patterns and antipatterns for python library project

    EDIT Following is best applicable for general (mostly Open Source) python libraries, which are supposed to run on different python versions and OSes. Libraries developed in strict Enterprise environment may be different case (be sure to review all the Problems sections anyway).

    END OF EDIT

    TL;DR: Adding pipenv files into python library project is likely to introduce extra complexity and can hide some errors while not adding anything to library security. For this reason, keep Pipfile, Pipfile.lock and .env out of library source control.

    You will be able to use full power of pipenv regardless of it's files living in .gitignore.

    Python library versus python application

    By python library I mean a project, typically having setup.py, being targeted for distribution and usage on various platform differing in python version and/or OS.

    Examples being maya, requests, flask etc.

    On the other side (not python library) there are applications targeted for specific python interpreter, OS and often being deployed in strictly consistent environment.

    pipfile describes these differences very well in it's Pipfile vs setup.py.

    What is pipenv (deployment tool)

    I completely agree on the statement, that pipenv is deployment tool as it allows to:

    • define strict requirements (Pipfile.lock) for deployment of virtual environment
    • apply those strict requirements in reproducible manner on different machines

    It helps when one has to deploy an application or develop in python environment very consistent across multiple developers.

    To call pipenv packaging tool is misleading if one expects it to create python libraries or to be deeply involved in creation of them. Yes, pipenv can help a lot (in local development of libraries) but can possibly harm (often in CI tests when used without deeper thought).

    Applying "security reasons" in wrong context

    TL;DR: pipenv provides secure environment via applying approved concrete dependencies described in Pipfile.lock file and python library is only allowed to define abstract dependencies (thus cannot provide Pipfile.lock).

    pipenv shines in deployment scenarios following these steps:

    • define abstract dependencies (via Pipfile)
    • generate from it concrete dependencies resulting in Pipfile.lock
    • create (virtual) python environment reflecting those concrete dependencies
    • run tests to make sure, given environment works as expected and is secure
    • release the tested "golden" Pipfile.lock as definition of approved python environment
    • others can use pipenv sync to apply "the golden" Pipfile.lock elsewhere getting identical python environment.

    With development of python library one cannot achieve such security, because libraries must not define concrete dependencies. Breaking this rule (thus trying to declare concrete dependencies by python library) results in problems such as:

    • problems to find satisfying version of shared libraries (each strict package defines exact version of shared library and it is very likely the versions will differ and prevent finding commonly acceptable version)
    • concrete dependencies may depend on python version, OS or other environment markers and trying to install the package in diferent context can easily fail to satisfy some of rules defined in original abstract dependencies.

    Problem: Hiding broken setup.py defined dependencies

    setup.py shall define all abstract dependencies via install_requires.

    If Pipfile defines those dependencies too, it may easily hide problems such as:

    • missing dependency in install_requires
    • Pipfile defines specific rules (version ranges etc.) for a dependency and install_requires does not.

    To prevent it, follow these rules:

    • library defined dependencies must not appear in Pipfile
    • the [packages] section in Pipfile shall be either empty or define only single dependency on the library itself.

    Problem: Pipfile.lock in repository

    Keeping Pipfile.lock (typically for "security reasons") in library repository is wrong, because:

    • described dependencies are likely to be invalid for different python versions or in another OS
    • developers are forced to update the file not only when they add/remove some dependency, but also when other libraries are updated and may be usable within the library.

    To prevent it, one should:

    • remove Pipfile.lock from repository and add it into .gitignore

    Problem: Competing with tox (hiding usedevelop)

    If tox.ini contains in it's commands section entries such as:

    • pipenv install
    • pipenv install --dev
    • pipenv lock

    it is often a problem, because:

    • pipenv install shall install only the library itself, and tox is (by default) doing it too. Apart from duplicity it also prevents of usedevelop=True and usedevelop=False in tox.ini because Pipenv is able to express it only in one variant (and tox.ini allows differencies in different environments).

    To prevent it, one should:

    Problem: Breaking builds, if pipenv fails

    pipenv is under heavy development and things break sometime. If such issue breaks your CI build, there is a failure which could be prevented by not using pipenv and using traditional tools (which are often a bit more mature).

    To prevent it, one should:

    • think twice before adding pipenv into a CI build script, tox.ini or similar place. Do you know what value you get from adding it? Could be the job done with existing tooling?
    • do not add it "just for security reasons" or because "everybody does".

    Summary

    Key questions regarding pipenv role in development of python library are:

    • What value pipenv really brings? A: Virtualenv management tool.
    • What is relevent use case for pipenv? A: Manage virtualenv.
    • Shall it appear in the library repository? A: NO.

    Few more details and tricks follow.

    pipenv will not add any security to your package

    Do not push it into project just because everybody does it or because you expect extra security. It will disappoint you.

    Securing by using concrete (and approved) dependencies shall take place in later phase in the application going to use your library.

    Keep Pipfile, Pipfile.lock and .env files out of repository

    Put the files into .gitignore.

    Pipfile is easy to recreate as demonstrated below as most or all requirements are already defined in your setup.py. And the .env file probably contains private information, which shall not be shared.

    Keeping these files out of repository will prevent all the problems, which may happen with CI builds when using pipenv in situations, which are not appropriate.

    pipenv as developer's private toolbox

    pipenv may simplify developer's work as virtualenv management tool.

    The trick is to learn, how to quickly recreate your (private) pipenv related files, e.g.:

    $ cd <project_repository>
    $ # your library will bring the dependencies (via install_requires in setup.py)
    $ pipenv install -e .   
    $ # add more dev tools you preffer 
    $ pipenv install --dev ipython pdbpp
    $ # start hacking
    $ pipenv shell
    ...
    

    Use .env file if you need convenient method for setting up environment variables.

    Remember: Keep pipenv usage out of your CI builds and your life will be simpler.

    Trick: Use setup.py ability to declare extras dependencies

    In your setup.py use the extras_requires section:

    from setuptools import setup
    
    setup(
        name='mypackage',
        ....,
        install_requires=["jinja2", "simplejson"],
        extras_require={
            'tests': ['pytest', 'pyyaml'],
            'pg': ['psycopg2'],
        },
        ....
    )
    

    To install all dependencies declared for tests extra:

    $ pipenv install -e .[tests]
    

    Note, that it will always include the install_requires dependencies.

    This method does not allow spliting dependencies into default and dev sections, but this shall not be real problem in expected scenarios.

    Type: Documentation :book: Type: Discussion 
    opened by vlcinsky 74
  • April (then May) 2020 Release Tracking Issue

    April (then May) 2020 Release Tracking Issue

    This is an internal tracking issue which will tie in the related issues which will be tackled/still need to be updated for the purposes of cutting the release. It's been a long time coming (see https://github.com/pypa/pipenv/issues/4058#issuecomment-565550646 and https://github.com/pypa/pipenv/issues/3742#issuecomment-492100711 for some past comments on that) and there's a tentative goal of getting a pre-release out in March 2020.

    (Edited by @brainwane to say: fixing some brokenness in the continuous integration setup is delaying this release 2020.04.1a1 till -- new estimate -- 21 April 2020.)

    (Edited by @brainwane to say: the prerelease 2020.4.1b1 is now out, as of 29 April, and Dan aims to get the next release out in about a week.)

    (Edited by @brainwane in conversation with Dan on 5 March 2020 and then throughout March & April)

    • [x] Other Items in the March 2020 release milestone:
      • [x] #3613 Pipenv installs wrong packages (ignoring package lock)
      • [x] #4137 Update README and Read the Docs project to point to docs at pipenv.pypa.io
    • [x] Fix pip-shims test failures (merge the bugfix/56 branch)
    • [x] requirementslib fixes:
      • [x] sarugaku/requirementslib#204 requirementslib issue AST parsing of setup.py fails on non-addition type binOps
      • [x] sarugaku/requirementslib#205 AST parsing fails on non-utf8 setup.py files
      • [x] sarugaku/requirementslib/issues/214 We shouldn't install upgraded versions of test dependencies in CI
      • [x] sarugaku/requirementslib#219 calculator Add requirement calculator for artifacts in PyPI
      • [x] Review requirements-lib issues for other pipenv release blockers
    • [x] Make new releases of related libraries:
    • [x] Finish, approve and merge #4169 to address missing dependencies/imports
      • [x] Fix news entry/entries
      • [x] Fix broken CI configuration
      • [x] Get tests to pass
    • [x] Fix #4188 by either getting pyup API key working again or choosing and implementing an alternative
    • [x] Get GitHub tests to pass on master (skipping the test mentioned in #4201)
    • [x] Improve release automation to allow generation of prereleases
      • [x] Generate changelog in draft mode
      • [x] Don't autotag & push tag to repo
    • [x] Update and run through "Test locally" and "Uploading the release" for packaging/release checklist
    • [x] Package and upload pipenv prerelease version 2020.04.1a1 to PyPI

    That's what Dan aims to do by 21 April 2020. Then:

    • [x] Make another new release of requirementslib that incorporates a fix to https://github.com/sarugaku/requirementslib/issues/216
      • [x] Relock requirementslib dependencies
    • [x] Publicize pre-release and ask for a week of testing
      • [x] Especially testing on Windows against PEP 517 backends and involving virtualenvs
    • [x] After ~1 week (if no showstopper bugs), publish new release

    How others can help:

    opened by techalchemy 72
  • Installation error from requirements.txt with -e

    Installation error from requirements.txt with -e

    Still having errors, with pipenv 7.6.9, trying to port a project. Here's a reduced/simplified case showing a reproducible error:

    $ cat requirements.txt 
    Flask==0.9
    -e git+ssh://[email protected]/closeio/[email protected]#egg=Flask-SQLAlchemy
    flask-migrate==1.8.0
    
    $ pipenv install
    Creating a virtualenv for this project…
    ⠋New python executable in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/bin/python2.7
    Also creating executable in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/bin/python
    Installing setuptools, pip, wheel...done.
    
    Virtualenv location: /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ
    Requirements.txt found, instead of Pipfile! Converting…
    Warning: Your Pipfile now contains pinned versions, if your requirements.txt did. 
    We recommend updating your Pipfile to specify the "*" version, instead.
    No package provided, installing all dependencies.
    Pipfile.lock not found, creating…
    Locking [dev-packages] dependencies…
    Locking [packages] dependencies…
    No handlers could be found for logger "pip.vcs.git"
    Updated Pipfile.lock!
    Installing dependencies from Pipfile.lock…
      🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 13/13 — 00:00:04
    An error occured while installing -e git+ssh://[email protected]/closeio/[email protected]#egg=flask-sqlalchemy! Will try again.
    Installing initially–failed dependencies…
    Obtaining flask-sqlalchemy from git+ssh://[email protected]/closeio/[email protected]#egg=flask-sqlalchemy
      Skipping because already up-to-date.
    Requirement already satisfied: Flask>=0.9 in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages (from flask-sqlalchemy)
    Requirement already satisfied: SQLAlchemy>=0.7 in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages (from flask-sqlalchemy)
    Requirement already satisfied: Werkzeug>=0.7 in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages (from Flask>=0.9->flask-sqlalchemy)
    Requirement already satisfied: Jinja2>=2.4 in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages (from Flask>=0.9->flask-sqlalchemy)
    Requirement already satisfied: MarkupSafe>=0.23 in /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages (from Jinja2>=2.4->Flask>=0.9->flask-sqlalchemy)
    Installing collected packages: flask-sqlalchemy
      Found existing installation: Flask-SQLAlchemy 2.1
    
    Exception:
    Traceback (most recent call last):
      File "/Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main
        status = self.run(options, args)
      File "/Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages/pip/commands/install.py", line 342, in run
        prefix=options.prefix_path,
      File "/Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages/pip/req/req_set.py", line 778, in install
        requirement.uninstall(auto_confirm=True)
      File "/Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/lib/python2.7/site-packages/pip/req/req_install.py", line 703, in uninstall
        '(at %s)' % (link_pointer, self.name, dist.location)
    AssertionError: Egg-link /Users/philfreo/.local/share/virtualenvs/pipenv-problem-qZknlxgQ/src/flask-sqlalchemy does not match installed location of flask-sqlalchemy (at /Users/philfreo/Sites/foo/pipenv-problem)
    
      ☤  ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/1 — 00:00:00
    
    opened by philfreo 72
  • pipenv lock hangs. It really does.

    pipenv lock hangs. It really does.

    This is a followup to #2681, which was closed without addressing the issue for some users. Also #3812, #3829, SO and someone's blog rant.

    Summary pipenv lock downloads every available artifact of installed packages and their dependencies. It does this to calculate their hashes, even when the artifact url includes the hash in a fragment. For some large packages, such as scipy, which have large dependencies and many artifacts per version, this behavior can result in unreasonably long delays for some users (893MB vs. 50MB download). It's also bad netiquette towards pypi.

    Symptoms

    • @connormclaud noted that lock seems peculiarly sensitive to network conditions before it disappeared by itself.
    • @Pithikos complained of pipenv lock hanging when installing scipy
    • @jackiekazil was surprised that the problem later seemed to disappear of its own.

    #2681 was closed by @techalchemy with a comment suggesting the delay is due to lengthy build times (which don't affect pipenv lock), but asked users to provide steps to reproduce.

    note: All the packages fetched have wheels.

    Details

    pipenv.lock calls Resolver.resolve() which enables all artifacts https://github.com/pypa/pipenv/blob/4c003521052d3b607be5abedf989744a5c172bda/pipenv/patched/piptools/resolver.py#L68-L73

    For a common setup consisting of scipy, pandas and numpy, here's the list of artifacts:

    Artifacts Queued for Hash Retrieval
    https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl#sha256=3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c
    https://files.pythonhosted.org/packages/dd/bf/4138e7bfb757de47d1f4b6994648ec67a51efe58fa907c1e11e350cddfca/six-1.12.0.tar.gz#sha256=d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73
    https://files.pythonhosted.org/packages/ad/99/5b2e99737edeb28c71bcbec5b5dda19d0d9ef3ca3e92e3e925e7c0bb364c/python-dateutil-2.8.0.tar.gz#sha256=c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e
    https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl#sha256=7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb
    https://files.pythonhosted.org/packages/28/c1/901d7b80bf7793352fd0b2e6a8688d44bf2cba8d8772b8ca25f71f129f77/scipy-1.3.0-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=4907040f62b91c2e170359c3d36c000af783f0fa1516a83d6c1517cde0af5340
    https://files.pythonhosted.org/packages/94/b2/03c3f3a2e5d07014103370d49415eccaaae2c07c2b25164be6f8a76913c6/scipy-1.3.0-cp35-cp35m-manylinux1_i686.whl#sha256=1db9f964ed9c52dc5bd6127f0dd90ac89791daa690a5665cc01eae185912e1ba
    https://files.pythonhosted.org/packages/14/49/8f13fa215e10a7ab0731cc95b0e9bb66cf83c6a98260b154cfbd0b55fb19/scipy-1.3.0-cp35-cp35m-manylinux1_x86_64.whl#sha256=adadeeae5500de0da2b9e8dd478520d0a9945b577b2198f2462555e68f58e7ef
    https://files.pythonhosted.org/packages/7a/ed/877f676c9e736b62385d1220602ceee3ca5c574bbb95c582a6b74bf047e2/scipy-1.3.0-cp35-cp35m-win32.whl#sha256=03b1e0775edbe6a4c64effb05fff2ce1429b76d29d754aa5ee2d848b60033351
    https://files.pythonhosted.org/packages/ff/c5/64e6312d301c77f2a7acb5e755238bb8ba57e93feaade41ed73334ae2768/scipy-1.3.0-cp35-cp35m-win_amd64.whl#sha256=a7695a378c2ce402405ea37b12c7a338a8755e081869bd6b95858893ceb617ae
    https://files.pythonhosted.org/packages/81/ae/125c21f09b202c3009ad7d9fb0263fb7d6053813d4b67ccbbe4d65f7f53a/scipy-1.3.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=826b9f5fbb7f908a13aa1efd4b7321e36992f5868d5d8311c7b40cf9b11ca0e7
    https://files.pythonhosted.org/packages/42/df/cf4801dc7205d5535ddbdc426daa64a6e2120fb312dbb01d27814c9400a9/scipy-1.3.0-cp36-cp36m-manylinux1_i686.whl#sha256=b283a76a83fe463c9587a2c88003f800e08c3929dfbeba833b78260f9c209785
    https://files.pythonhosted.org/packages/72/4c/5f81e7264b0a7a8bd570810f48cd346ba36faedbd2ba255c873ad556de76/scipy-1.3.0-cp36-cp36m-manylinux1_x86_64.whl#sha256=db61a640ca20f237317d27bc658c1fc54c7581ff7f6502d112922dc285bdabee
    https://files.pythonhosted.org/packages/0b/27/fda16e2b06d6b2202f3c83efc6dea67fbf96aa158d00cc29a8aa6d645e88/scipy-1.3.0-cp36-cp36m-win32.whl#sha256=409846be9d6bdcbd78b9e5afe2f64b2da5a923dd7c1cd0615ce589489533fdbb
    https://files.pythonhosted.org/packages/9e/fd/9a995b7fc18c6c17ce570b3cfdabffbd2718e4f1830e94777c4fd66e1179/scipy-1.3.0-cp36-cp36m-win_amd64.whl#sha256=c19a7389ab3cd712058a8c3c9ffd8d27a57f3d84b9c91a931f542682bb3d269d
    https://files.pythonhosted.org/packages/04/66/ec5f1283d6a290a9153881a896837487338c44639c1305cc59e1c7b69cc9/scipy-1.3.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=09d008237baabf52a5d4f5a6fcf9b3c03408f3f61a69c404472a16861a73917e
    https://files.pythonhosted.org/packages/9a/38/9f5aa6814c7062318ba147cbfcddacea71ac15ddf69dced0765fe8fea39d/scipy-1.3.0-cp37-cp37m-manylinux1_i686.whl#sha256=a84c31e8409b420c3ca57fd30c7589378d6fdc8d155d866a7f8e6e80dec6fd06
    https://files.pythonhosted.org/packages/5d/bd/c0feba81fb60e231cf40fc8a322ed5873c90ef7711795508692b1481a4ae/scipy-1.3.0-cp37-cp37m-manylinux1_x86_64.whl#sha256=c5ea60ece0c0c1c849025bfc541b60a6751b491b6f11dd9ef37ab5b8c9041921
    https://files.pythonhosted.org/packages/be/cc/6f7842a4d9aa7f51155f849185631e1201df255742de84d724ac33bff723/scipy-1.3.0-cp37-cp37m-win32.whl#sha256=6c0543f2fdd38dee631fb023c0f31c284a532d205590b393d72009c14847f5b1
    https://files.pythonhosted.org/packages/53/17/9dfd64540b6645fae581462ed2d1c8e680b7e946ca2789c5149693660392/scipy-1.3.0-cp37-cp37m-win_amd64.whl#sha256=10325f0ffac2400b1ec09537b7e403419dcd25d9fee602a44e8a32119af9079e
    https://files.pythonhosted.org/packages/cb/97/361c8c6ceb3eb765371a702ea873ff2fe112fa40073e7d2b8199db8eb56e/scipy-1.3.0.tar.gz#sha256=c3bb4bd2aca82fb498247deeac12265921fe231502a6bc6edea3ee7fe6c40a7a
    https://files.pythonhosted.org/packages/8f/0b/1a2c21bb69138337dc079841aa4a45e5b2fc7a4260c0907f5254fb08f02e/numpy-1.16.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722
    https://files.pythonhosted.org/packages/f2/34/8de93582f74bf3b9a277054b436b9cf53128d7b84820bc6eb859d0afac74/numpy-1.16.4-cp27-cp27m-manylinux1_i686.whl#sha256=e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52
    https://files.pythonhosted.org/packages/20/2c/4d64f1cd4d2170b91d24ae45725de837bd40c34c9c04c94255c0f51c513d/numpy-1.16.4-cp27-cp27m-manylinux1_x86_64.whl#sha256=2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e
    https://files.pythonhosted.org/packages/13/2d/0fa2e8de7022a4a39497f4a9e384b8b129dbcf5d1b059f1043e21f6f0a48/numpy-1.16.4-cp27-cp27m-win32.whl#sha256=94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69
    https://files.pythonhosted.org/packages/a6/db/18770d6b8419188d56b8ddd9794cb34c2d9f1d272ed8b40fa1ee38a3ca06/numpy-1.16.4-cp27-cp27m-win_amd64.whl#sha256=7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7
    https://files.pythonhosted.org/packages/35/51/7eae9042f5904463cb27fea567afc15e90956bd4b7cba98ec1969e58f74a/numpy-1.16.4-cp27-cp27mu-manylinux1_i686.whl#sha256=0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633
    https://files.pythonhosted.org/packages/1f/c7/198496417c9c2f6226616cff7dedf2115a4f4d0276613bab842ec8ac1e23/numpy-1.16.4-cp27-cp27mu-manylinux1_x86_64.whl#sha256=b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8
    https://files.pythonhosted.org/packages/48/b4/266431019b3b2e0f343a4f98db31add8a5ce2d464e30cdd9deaca29a8751/numpy-1.16.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336
    https://files.pythonhosted.org/packages/38/61/3704bcbedb6fbcef9b92fe66d08af2b4328d10f199251e9b7a6db71547dc/numpy-1.16.4-cp35-cp35m-manylinux1_i686.whl#sha256=141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7
    https://files.pythonhosted.org/packages/bb/ef/d5a21cbc094d3f4d5b5336494dbcc9550b70c766a8345513c7c24ed18418/numpy-1.16.4-cp35-cp35m-manylinux1_x86_64.whl#sha256=6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5
    https://files.pythonhosted.org/packages/58/13/f5e2b4057707b62457085d48f27cde6caa594bfa0254aceb29405fb8b5a4/numpy-1.16.4-cp35-cp35m-win32.whl#sha256=d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10
    https://files.pythonhosted.org/packages/b4/1b/36bd20a4a1f41729c406014974925598edaeca1ca2510a2843892329b2f1/numpy-1.16.4-cp35-cp35m-win_amd64.whl#sha256=14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b
    https://files.pythonhosted.org/packages/0f/c9/3526a357b6c35e5529158fbcfac1bb3adc8827e8809a6d254019d326d1cc/numpy-1.16.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3
    https://files.pythonhosted.org/packages/e4/ca/037f4d2b7788bd077af2bbe887f7225c74c5df8bab4824514d7decb8a904/numpy-1.16.4-cp36-cp36m-manylinux1_i686.whl#sha256=ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797
    https://files.pythonhosted.org/packages/87/2d/e4656149cbadd3a8a0369fcd1a9c7d61cc7b87b3903b85389c70c989a696/numpy-1.16.4-cp36-cp36m-manylinux1_x86_64.whl#sha256=27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5
    https://files.pythonhosted.org/packages/73/98/cecf557b7f3f1dfac93171392887e4f7a606d6867752311c56a30742d581/numpy-1.16.4-cp36-cp36m-win32.whl#sha256=dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29
    https://files.pythonhosted.org/packages/20/ed/e036d31a9b2c750f270cbb1cfc1c0f94ac78ae504eea7eec3267be4e294a/numpy-1.16.4-cp36-cp36m-win_amd64.whl#sha256=ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166
    https://files.pythonhosted.org/packages/6b/be/608b7f72b851472388eafc010a5d46dae5d41610d0ac5df4c98c2ed1b865/numpy-1.16.4-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7
    https://files.pythonhosted.org/packages/dd/40/27395e0ab15dbcc5015899f4cc4ecbb535864db17cfb3b9a5bae66a98ea7/numpy-1.16.4-cp37-cp37m-manylinux1_i686.whl#sha256=f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a
    https://files.pythonhosted.org/packages/fc/d1/45be1144b03b6b1e24f9a924f23f66b4ad030d834ad31fb9e5581bd328af/numpy-1.16.4-cp37-cp37m-manylinux1_x86_64.whl#sha256=cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525
    https://files.pythonhosted.org/packages/07/46/656c25b39fc152ea525eef14b641993624a6325a8ae815b200de57cff0bc/numpy-1.16.4-cp37-cp37m-win32.whl#sha256=3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca
    https://files.pythonhosted.org/packages/ce/61/be72eee50f042db3acf0b1fb86650ad36d6c0d9be9fc29f8505d3b9d6baa/numpy-1.16.4-cp37-cp37m-win_amd64.whl#sha256=dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8
    https://files.pythonhosted.org/packages/d3/4b/f9f4b96c0b1ba43d28a5bdc4b64f0b9d3fbcf31313a51bc766942866a7c7/numpy-1.16.4.zip#sha256=7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7
    https://files.pythonhosted.org/packages/52/ff/912fe03a623a70bcf297d466013a0b4f4c68c3b60f86bf226682d061fc09/pandas-0.24.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=17916d818592c9ec891cbef2e90f98cc85e0f1e89ed0924c9b5220dc3209c846
    https://files.pythonhosted.org/packages/34/cc/1911d56b9464de76f7ef34c6b1c66e82d3a394fd6d0925d5203e903d4eee/pandas-0.24.2-cp27-cp27m-win32.whl#sha256=42e5ad741a0d09232efbc7fc648226ed93306551772fc8aecc6dce9f0e676794
    https://files.pythonhosted.org/packages/61/57/6c233cc63597c6aa6337e717bdeabf791e8b618e9c893922a223e4e41cf4/pandas-0.24.2-cp27-cp27m-win_amd64.whl#sha256=c9a4b7c55115eb278c19aa14b34fcf5920c8fe7797a09b7b053ddd6195ea89b3
    https://files.pythonhosted.org/packages/95/dd/295a1fa20c0d6207ba8df5c53c9c2340ca370f6a230b173c89c479761526/pandas-0.24.2-cp27-cp27mu-manylinux1_i686.whl#sha256=5149a6db3e74f23dc3f5a216c2c9ae2e12920aa2d4a5b77e44e5b804a5f93248
    https://files.pythonhosted.org/packages/db/83/7d4008ffc2988066ff37f6a0bb6d7b60822367dcb36ba5e39aa7801fda54/pandas-0.24.2-cp27-cp27mu-manylinux1_x86_64.whl#sha256=cc8fc0c7a8d5951dc738f1c1447f71c43734244453616f32b8aa0ef6013a5dfb
    https://files.pythonhosted.org/packages/da/82/1bc41a30737b70863c9b50983ca0413aa47905d215892ee136de3217bf3b/pandas-0.24.2-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=17450e25ae69e2e6b303817bdf26b2cd57f69595d8550a77c308be0cd0fd58fa
    https://files.pythonhosted.org/packages/b1/57/069982c126d22bbdb4de71912eec2c1d8d303149a0d7b17927797479a0ed/pandas-0.24.2-cp35-cp35m-manylinux1_i686.whl#sha256=366f30710172cb45a6b4f43b66c220653b1ea50303fbbd94e50571637ffb9167
    https://files.pythonhosted.org/packages/74/24/0cdbf8907e1e3bc5a8da03345c23cbed7044330bb8f73bb12e711a640a00/pandas-0.24.2-cp35-cp35m-manylinux1_x86_64.whl#sha256=4e718e7f395ba5bfe8b6f6aaf2ff1c65a09bb77a36af6394621434e7cc813204
    https://files.pythonhosted.org/packages/f2/7a/f2ed4fde495eb8d13dc595382c33f8aa2b58e0911ca4b12c1ca825872493/pandas-0.24.2-cp35-cp35m-win32.whl#sha256=8c872f7fdf3018b7891e1e3e86c55b190e6c5cee70cab771e8f246c855001296
    https://files.pythonhosted.org/packages/b3/59/38c88e1b26779b287a82c3d7601ec42c15e4acef09196e870c4fe9b77bd4/pandas-0.24.2-cp35-cp35m-win_amd64.whl#sha256=a3352bacac12e1fc646213b998bce586f965c9d431773d9e91db27c7c48a1f7d
    https://files.pythonhosted.org/packages/2a/67/0a59cb257c72bb837575ca0ddf5f0fe2a482e98209b7a1bed8cde68ddb46/pandas-0.24.2-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=d7b460bc316064540ce0c41c1438c416a40746fd8a4fb2999668bf18f3c4acf1
    https://files.pythonhosted.org/packages/7f/99/9c508429078eb4e103e22b4a191d12f7a9ceccee8db7ff18266cbe84e6c9/pandas-0.24.2-cp36-cp36m-manylinux1_i686.whl#sha256=c1bd07ebc15285535f61ddd8c0c75d0d6293e80e1ee6d9a8d73f3f36954342d0
    https://files.pythonhosted.org/packages/19/74/e50234bc82c553fecdbd566d8650801e3fe2d6d8c8d940638e3d8a7c5522/pandas-0.24.2-cp36-cp36m-manylinux1_x86_64.whl#sha256=071e42b89b57baa17031af8c6b6bbd2e9a5c68c595bc6bf9adabd7a9ed125d3b
    https://files.pythonhosted.org/packages/65/3e/16260dcad8d28167f8622dd5e600700fa1665a9dc0b245bb6068a34f657c/pandas-0.24.2-cp36-cp36m-win32.whl#sha256=2538f099ab0e9f9c9d09bbcd94b47fd889bad06dc7ae96b1ed583f1dc1a7a822
    https://files.pythonhosted.org/packages/d0/4e/9db3468e504ac9aeadb37eb32bcf0a74d063d24ad1471104bd8a7ba20c97/pandas-0.24.2-cp36-cp36m-win_amd64.whl#sha256=83c702615052f2a0a7fb1dd289726e29ec87a27272d775cb77affe749cca28f8
    https://files.pythonhosted.org/packages/fc/43/fd867e3347559845c8f993059d410c50a1e18709f1c4d4b3b47323a06a37/pandas-0.24.2-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl#sha256=627594338d6dd995cfc0bacd8e654cd9e1252d2a7c959449228df6740d737eb8
    https://files.pythonhosted.org/packages/22/e6/2d47835f91eb010036be207581fa113fb4e3822ec1b4bafb0d3d105fede6/pandas-0.24.2-cp37-cp37m-manylinux1_x86_64.whl#sha256=4fe0d7e6438212e839fc5010c78b822664f1a824c0d263fd858f44131d9166e2
    https://files.pythonhosted.org/packages/04/8b/a1d5f257bfee6aab440e763505c65368bbf713309c9dc70ceeb8d4677c2e/pandas-0.24.2-cp37-cp37m-win32.whl#sha256=bcdd06007cca02d51350f96debe51331dec429ac8f93930a43eb8fb5639e3eb5
    https://files.pythonhosted.org/packages/61/c7/f943fceb712579bc538700e2c157dc4972e16abfe29bd4969149bad98c74/pandas-0.24.2-cp37-cp37m-win_amd64.whl#sha256=90f116086063934afd51e61a802a943826d2aac572b2f7d55caaac51c13db5b5
    https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz#sha256=4f919f409c433577a501e023943e582c57355d50a724c589e78bc1d551a535a2
    https://files.pythonhosted.org/packages/3d/73/fe30c2daaaa0713420d0382b16fbb761409f532c56bdcc514bf7b6262bb6/pytz-2019.1-py2.py3-none-any.whl#sha256=303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda
    https://files.pythonhosted.org/packages/df/d5/3e3ff673e8f3096921b3f1b79ce04b832e0100b4741573154b72b756a681/pytz-2019.1.tar.gz#sha256=d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141
    

    That's a lot of sequential network round-trips to wait through, and most of these are for different platforms than the installation. But that's not all.

    Each artifact is passed to HashCache.get_hash. https://github.com/pypa/pipenv/blob/4c003521052d3b607be5abedf989744a5c172bda/pipenv/patched/piptools/repositories/pypi.py#L60-L71

    The pypi artifact urls includes the sha256 hash, parsed into new_location.hash, but it isn't used. If the HashCache doesn't already hold the location key, the artifact is downloaded, hashed and then the hash is stored. This is the root cause of the delay, and in the above examples results in downloading 893MB of artifacts, compared to the 50MBs-worth which are installed.

    The problem disappears if the user is patient enough to wait it out, or if the connection is fast. However, it seems most users are surprised by the delay (me included), and expect it to be more or less instantaneous once the packages are installed.

    As a quick verification, I patched the get_hash method to use the hash fragment from the url if available, and the pipenv lock run time dropped to a few seconds.

    Sidenote, --verbose does not log network requests, so this was masked from view even when trying to debug.

    Type: Enhancement :bulb: Type: Discussion Category: Dependency Resolution Category: Performance 
    opened by ghost 65
  •  FileNotFoundError: [Errno 2] when installing pipenv from pipfile

    FileNotFoundError: [Errno 2] when installing pipenv from pipfile

    Hi all,

    I am experiencing some issues while building my docker file on the last shown step (1):

    COPY Pipfile* ./
    RUN pip3 install pipenv
    (1) RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy --clear --keep-outdated.
    

    I get the following Stacktrace:

     > [builder-image 5/5] RUN pipenv install --deploy --clear --keep-outdated:                                                                                                                                                    
    #10 1.527 Creating a virtualenv for this project...                                                                                                                                                                            
    #10 1.527 Pipfile: /Pipfile                                                                                                                                                                                                    
    #10 1.543 Using /usr/bin/python3 (3.10.4) to create virtualenv...                                                                                                                                                              
    â ź Creating virtual environment...created virtual environment CPython3.10.4.final.0-64 in 491ms                                                                                                                                 
    #10 2.680   creator CPython3Posix(dest=/.venv, clear=False, no_vcs_ignore=False, global=False)
    #10 2.680   seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    #10 2.680     added seed packages: pip==22.0.4, setuptools==62.1.0, wheel==0.37.1
    #10 2.680   activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
    #10 2.680 
    #10 2.758✔ Successfully created virtual environment! 
    #10 2.760 Traceback (most recent call last):
    #10 2.760   File "/usr/local/bin/pipenv", line 8, in <module>
    #10 2.760     sys.exit(cli())
    #10 2.760   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 1128, in __call__
    #10 2.761     return self.main(*args, **kwargs)
    #10 2.761   File "/usr/local/lib/python3.10/dist-packages/pipenv/cli/options.py", line 56, in main
    #10 2.761     return super().main(*args, **kwargs, windows_expand_args=False)
    #10 2.761   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 1053, in main
    #10 2.761     rv = self.invoke(ctx)
    #10 2.761   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 1659, in invoke
    #10 2.762     return _process_result(sub_ctx.command.invoke(sub_ctx))
    #10 2.764   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 1395, in invoke
    #10 2.765     return ctx.invoke(self.callback, **ctx.params)
    #10 2.765   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 754, in invoke
    #10 2.765     return __callback(*args, **kwargs)
    #10 2.766   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/decorators.py", line 84, in new_func
    #10 2.766     return ctx.invoke(f, obj, *args, **kwargs)
    #10 2.766   File "/usr/local/lib/python3.10/dist-packages/pipenv/vendor/click/core.py", line 754, in invoke
    #10 2.767     return __callback(*args, **kwargs)
    #10 2.767   File "/usr/local/lib/python3.10/dist-packages/pipenv/cli/command.py", line 222, in install
    #10 2.767     do_install(
    #10 2.767   File "/usr/local/lib/python3.10/dist-packages/pipenv/core.py", line 1964, in do_install
    #10 2.768     ensure_project(
    #10 2.768   File "/usr/local/lib/python3.10/dist-packages/pipenv/core.py", line 552, in ensure_project
    #10 2.770     ensure_virtualenv(
    #10 2.770   File "/usr/local/lib/python3.10/dist-packages/pipenv/core.py", line 485, in ensure_virtualenv
    #10 2.770     do_create_virtualenv(
    #10 2.770   File "/usr/local/lib/python3.10/dist-packages/pipenv/core.py", line 1012, in do_create_virtualenv
    #10 2.771     project._environment = Environment(
    #10 2.772   File "/usr/local/lib/python3.10/dist-packages/pipenv/environment.py", line 70, in __init__
    #10 2.772     self._base_paths = self.get_paths()
    #10 2.773   File "/usr/local/lib/python3.10/dist-packages/pipenv/environment.py", line 394, in get_paths
    #10 2.774     c = subprocess_run(command)
    #10 2.774   File "/usr/local/lib/python3.10/dist-packages/pipenv/utils/processes.py", line 75, in subprocess_run
    #10 2.774     return subprocess.run(
    #10 2.775   File "/usr/lib/python3.10/subprocess.py", line 501, in run
    #10 2.775     with Popen(*popenargs, **kwargs) as process:
    #10 2.775   File "/usr/lib/python3.10/subprocess.py", line 966, in __init__
    #10 2.776     self._execute_child(args, executable, preexec_fn, close_fds,
    #10 2.778   File "/usr/lib/python3.10/subprocess.py", line 1842, in _execute_child
    #10 2.778     raise child_exception_type(errno_num, err_msg, err_filename)
    #10 2.778 FileNotFoundError: [Errno 2] No such file or directory: '/.venv/bin/python'
    ------
    executor failed running [/bin/sh -c pipenv install --deploy --clear --keep-outdated]: exit code: 1
    
    

    The solution I found is:

    COPY Pipfile* ./
    RUN pip3 install pipenv==v2022.4.20
    RUN PIPENV_VENV_IN_PROJECT=1 pipenv install --deploy --clear --keep-outdated
    

    The build image is ubuntu:22.04, python-version 3.10.4

    Contributor Candidate 
    opened by limkin092 64
  • Pipenv lock still takes way too long to complete

    Pipenv lock still takes way too long to complete

    pipenv lock is still taking up to 30 minutes to complete for my medium-sized project.

    While #4403 was closed as fixed and indeed no full tree copies are made any more, pipenv lock is still unworkably slow. What used to take 50 seconds under 2018.11.26, now takes 30 minutes to figure out that nothing changed:

    $ export PIPENV_INSTALL_TIMEOUT=10000
    $ cp Pipfile.lock Pipfile.lock.before
    $ time pipenv lock
    Locking [dev-packages] dependencies…
    Building requirements...
    Resolving dependencies...
    ✔ Success!
    Locking [packages] dependencies…
    Building requirements...
    Resolving dependencies...
    ✔ Success!
    Updated Pipfile.lock (0e1198)!
    
    real	29m19.701s
    user	28m39.300s
    sys	4m8.222s
    $ diff -su Pipfile.lock.old Pipfile.lock
    Files Pipfile.lock.old and Pipfile.lock are identical
    

    This is making it untenable to keep using Pipenv.

    Full pipenv lock -v output in a gist.

    Pipfile:

    [[source]]
    name = "pypi"
    url = "https://pypi.org/simple"
    verify_ssl = true
    
    [dev-packages]
    flake8 = "*"
    flake8-bugbear = "*"
    black = "==19.10b0"
    pre-commit = "*"
    pytest = "*"
    pytest-cov = "*"
    
    [packages]
    project-name = {editable = true,path = "."}
    "zc.buildout" = "*"
    
    [requires]
    python_version = "3.6"
    

    where project-name (redacted name) lists the following install-requires lines:

    install_requires =
        apache-airflow[aws,celery,postgres,redis] >= 1.10.11
        airflow_multi_dagrun
        airflow-prometheus-exporter
    

    $ pipenv --support

    Pipenv version: '2020.8.13'

    Pipenv location: '/usr/local/Cellar/pipenv/2020.8.13/libexec/lib/python3.8/site-packages/pipenv'

    Python location: '/usr/local/Cellar/pipenv/2020.8.13/libexec/bin/python3.8'

    Python installations found:

    • 3.9.0: /Users/mj/bin/python3.9
    • 3.8.5: /usr/local/bin/python3
    • 3.8.5: /usr/local/bin/python3.8
    • 3.8.3: /Users/mj/bin/python3.8
    • 3.7.7: /Users/mj/bin/python3.7
    • 3.7.6: /opt/miniconda3/bin/python3
    • 3.7.6: /opt/miniconda3/bin/python3.7m
    • 3.7.6: /opt/miniconda3/bin/python3.7
    • 3.7.3: /Users/mj/.pyenv/versions/3.7.3/bin/python3
    • 3.6.10: /Users/mj/bin/python3.6
    • 3.6.1: /Users/mj/bin/pypy3
    • 3.5.9: /Users/mj/bin/python3.5
    • 3.4.10: /Users/mj/bin/python3.4
    • 3.3.7: /Users/mj/bin/python3.3
    • 3.2.6: /Users/mj/bin/python3.2
    • 2.7.18: /Users/mj/bin/python2.7
    • 2.7.16: /usr/bin/python2.7
    • 2.6.9: /Users/mj/bin/python2.6
    • 2.5.6: /Users/mj/bin/python2.5
    • 2.4.6: /Users/mj/bin/python2.4

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '3.8.5',
     'os_name': 'posix',
     'platform_machine': 'x86_64',
     'platform_python_implementation': 'CPython',
     'platform_release': '17.7.0',
     'platform_system': 'Darwin',
     'platform_version': 'Darwin Kernel Version 17.7.0: Wed May 27 17:00:02 PDT '
                         '2020; root:xnu-4570.71.80.1~1/RELEASE_X86_64',
     'python_full_version': '3.8.5',
     'python_version': '3.8',
     'sys_platform': 'darwin'}
    

    System environment variables:

    • PATH
    • AUTOJUMP_ERROR_PATH
    • NVM_INC
    • TERM_PROGRAM
    • GIT_PROMPT_END
    • rvm_bin_path
    • AUTOJUMP_SOURCED
    • GEM_HOME
    • NVM_CD_FLAGS
    • SHELL
    • TERM
    • HISTSIZE
    • TMPDIR
    • COPYFILE_DISABLE
    • IRBRC
    • Apple_PubSub_Socket_Render
    • CONDA_SHLVL
    • PERL5LIB
    • TERM_PROGRAM_VERSION
    • CONDA_PROMPT_MODIFIER
    • TERM_SESSION_ID
    • MY_RUBY_HOME
    • PERL_MB_OPT
    • LC_ALL
    • USER
    • HISTFILESIZE
    • NVM_DIR
    • COMMAND_MODE
    • CONDA_EXE
    • rvm_path
    • SSH_AUTH_SOCK
    • __CF_USER_TEXT_ENCODING
    • PTPIMG_API_KEY
    • _CE_CONDA
    • rvm_prefix
    • _
    • CONDA_PREFIX
    • PWD
    • HOMEBREW_GITHUB_API_TOKEN
    • EDITOR
    • LANG
    • ITERM_PROFILE
    • PYTHONSTARTUP
    • XPC_FLAGS
    • ITERM_ORIG_PS1
    • XPC_SERVICE_NAME
    • HISTCONTROL
    • _CE_M
    • FIGNORE
    • rvm_version
    • COLORFGBG
    • HOME
    • SHLVL
    • LC_TERMINAL_VERSION
    • ITERM_PREV_PS1
    • ITERM_SESSION_ID
    • PERL_LOCAL_LIB_ROOT
    • LOGNAME
    • CONDA_PYTHON_EXE
    • LC_CTYPE
    • GEM_PATH
    • GIT_PROMPT_ONLY_IN_REPO
    • CONDA_DEFAULT_ENV
    • NVM_BIN
    • DISPLAY
    • LC_TERMINAL
    • HGSRC
    • SECURITYSESSIONID
    • RUBY_VERSION
    • PERL_MM_OPT
    • COLORTERM
    • PIP_DISABLE_PIP_VERSION_CHECK
    • PYTHONDONTWRITEBYTECODE
    • PIP_SHIMS_BASE_MODULE
    • PIP_PYTHON_PATH
    • PYTHONFINDER_IGNORE_UNSUPPORTED

    Pipenv–specific environment variables:

    Debug–specific environment variables:

    • PATH: /usr/local/Cellar/pipenv/2020.8.13/libexec/tools:/usr/local/google-sdks/google-cloud-sdk/bin:/Users/mj/perl5/bin:/Users/mj/.nvm/versions/node/v12.14.1/bin:/Users/mj/.rvm/gems/ruby-2.3.0/bin:/Users/mj/.rvm/gems/[email protected]/bin:/Users/mj/.rvm/rubies/ruby-2.3.0/bin:/opt/miniconda3/bin:/opt/miniconda3/condabin:/Users/mj/bin:/Users/mj/Development/Library/zopatista_setup/bin:/Users/mj/Development/Library/zopatista_setup/audio:/usr/local/Cellar/ruby/2.7.1_2/bin:/Users/mj/.cargo/bin:/Users/mj/.poetry/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/MacGPG2/bin:/usr/local/sbin:/opt/X11/bin:/Applications/Postgres.app/Contents/Versions/latest/bin:/Users/mj/.local/bin:/Users/mj/.rvm/bin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin
    • SHELL: /bin/bash
    • EDITOR: vim
    • LANG: en_GB.UTF-8
    • PWD: /Users/mj

    Category: Dependency Resolution Category: Performance 
    opened by mjpieters 64
  • Platform sensitive lock mechanism

    Platform sensitive lock mechanism

    Is your feature request related to a problem? Please describe.

    I'm facing a problem regarding platform-dependent dependencies of packages used by my own package. For example, I'm using black during development and for that reason it's added as a package in the [dev-packages]-section of Pipfile. Another tool is twine.

    black has a windows only dependency called colorama. If you want to track this in our lock-file over multiple platforms, you could add it with a marker to your Pipfile. With this marker, it will be almost untouched once when you run pipenv lock --dev on a linux platform.

    twine has a dependency called keyring and this package has other linux only dependencies like SecretStorage, jeepney, cryptography, etc. You could use the same workaround here but:

    • it does not scale
    • it will be very hard to track changes
    • you might end up with "dead bodies" in your Pipfile

    Last but not least, also the proposed workaround does not work 100% correct because it removes the "index"-attribute of packages marked with the other platform.

    Describe the solution you'd like

    I would like to see a solution where the "lock"-mechanism does not touch any attribute of packages with a mis-match in their markers. This means, if I lock on windows, the packages with the marker sys_platform == 'linux' are unchanged. Further, I would like to see a weak inheritance of the markers. If I add a package like keyring with a marker to the Pipfile and the resolver notices that there are dependencies, all dependencies should "inherit" the marker. If other packages with no marker would need the package as well, then the marker should be removed so that only the weakest marker survives.

    Describe alternatives you've considered

    I checked the named categories and they does not solve the issue. Using named categories would mean, that I have to enter twine twice into the Pipfile, once in windows-group and once in a linux-group.

    Additional context

    I'm using windows10 and ubuntu20.04 with python 3.8.10 and pipenv==2022.12.19

    $ pipenv --support

    Pipenv version: '2022.12.19'

    Pipenv location: 'C:\\work\\.venv-pipenv38\\lib\\site-packages\\pipenv'

    Python location: 'C:\\work\\.venv-pipenv38\\Scripts\\python.exe'

    OS Name: 'nt'

    User pip version: '22.3.1'

    user Python installations found:

    • 3.10.5: C:\DEV\tools\python\py310\python.exe
    • 3.9.13: C:\DEV\tools\python\py39\python.exe
    • 3.8.10: C:\DEV\tools\python\py38\python.exe
    • 3.7.8: C:\DEV\tools\python\py37\python.exe
    • 3.6.8: C:\DEV\tools\python\py36\python.exe

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '3.8.10',
     'os_name': 'nt',
     'platform_machine': 'AMD64',
     'platform_python_implementation': 'CPython',
     'platform_release': '10',
     'platform_system': 'Windows',
     'platform_version': '10.0.19044',
     'python_full_version': '3.8.10',
     'python_version': '3.8',
     'sys_platform': 'win32'}
    

    System environment variables:

    • ALLUSERSPROFILE
    • ANDROID_NDK_HOME
    • APPDATA
    • BLENDER_EXECUTABLE
    • CAMLIBS
    • CLM_ACTIVATION_WIZARD
    • CLM_HOME
    • CLM_NEXT_HOME
    • COMMONPROGRAMFILES
    • COMPUTERNAME
    • COMSPEC
    • CONAN_CMAKE_GENERATOR
    • CONAN_MAKE_PROGRAM
    • CONAN_SSH_CHECKOUT
    • CONAN_USER_HOME
    • CONAN_USER_HOME_SHORT
    • CONAN_USE_ALWAYS_SHORT_PATHS
    • CONAN_V2_MODE
    • COMMONPROGRAMFILES(X86)
    • COMMONPROGRAMW6432
    • DRIVERDATA
    • EXEPATH
    • FLEXLM_TIMEOUT
    • HELIOS_EXECUTABLE
    • HOME
    • HOMEDRIVE
    • HOMEPATH
    • IOLIBS
    • JAVA_HOME
    • LOCALAPPDATA
    • LOGONSERVER
    • MSYSTEM
    • NEXTHINK
    • NUMBER_OF_PROCESSORS
    • OLDPWD
    • OS
    • ONEDRIVE
    • ONEDRIVECOMMERCIAL
    • ONLINESERVICES
    • PATH
    • PATHEXT
    • PIPENV_IGNORE_VIRTUALENVS
    • PIPENV_KEEP_OUTDATED
    • PIPENV_TOKEN
    • PIPENV_USERNAME
    • PIPENV_VENV_IN_PROJECT
    • PLINK_PROTOCOL
    • PROCESSOR_ARCHITECTURE
    • PROCESSOR_IDENTIFIER
    • PROCESSOR_LEVEL
    • PROCESSOR_REVISION
    • PROGRAMFILES
    • PS1
    • PSMODULEPATH
    • PUBLIC
    • PWD
    • PROGRAMDATA
    • PROGRAMFILES(X86)
    • PROGRAMW6432
    • PYCHARM COMMUNITY EDITION
    • PYCHARM
    • REGIONCODE
    • SHLVL
    • SYSTEMDRIVE
    • SYSTEMROOT
    • TEMP
    • TERM
    • TMP
    • TOXENV
    • USERDNSDOMAIN
    • USERDOMAIN
    • USERDOMAIN_ROAMINGPROFILE
    • USERNAME
    • USERPROFILE
    • VBOX_MSI_INSTALL_PATH
    • VIRTUAL_ENV
    • VS140COMNTOOLS
    • WINDIR
    • WORK
    • WSLENV
    • WT_PROFILE_ID
    • WT_SESSION
    • ZES_ENABLE_SYSMAN
    • _
    • PLATFORMCODE
    • PIP_DISABLE_PIP_VERSION_CHECK
    • PIP_PYTHON_PATH
    • PYTHONDONTWRITEBYTECODE
    • PYTHONFINDER_IGNORE_UNSUPPORTED

    Pipenv–specific environment variables:

    • PIPENV_IGNORE_VIRTUALENVS: 1
    • PIPENV_KEEP_OUTDATED: 0
    • PIPENV_TOKEN: ****
    • PIPENV_USERNAME: ****
    • PIPENV_VENV_IN_PROJECT: 1

    Debug–specific environment variables:

    • PATH: C;C:\work\.venv-pipenv38\Scripts;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Users\****\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\AdoptOpenJDK\jre-11.0.3.2-openj9\bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0;C:\windows\System32\OpenSSH;C:\Program Files\WindowsPowerShell\Scripts;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\MATLAB\R2019b\bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\dotnet;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files\Git\cmd;C:\Users\****\AppData\Local\Programs\Microsoft VS Code\bin;C:\Program Files\JetBrains\PyCharm 2020.2.2\bin;C:\Users\****\AppData\Local\Programs\MiKTeX\miktex\bin\x64;C:\DEV\tools;C:\Program Files\CMake\bin;C:\Program Files (x86)\Graphviz2.38\bin;C:\Users\****\AppData\Local\Pandoc;C:\DEV\android\platform-tools;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin
    • PWD: C:/work/python-packages/reality-capture-models
    • VIRTUAL_ENV: C:\work\.venv-pipenv38

    Contents of Pipfile ('C:\work\python-packages\reality-capture-models\Pipfile'):

    [[source]]
    url = "https://${PIPENV_USERNAME}:${PIPENV_TOKEN}@****"
    verify_ssl = true
    name = "artifactory"
    
    [requires]
    python_version = "3.8"
    
    [dev-packages]
    pytest = "*"
    black = "*"
    isort = "*"
    pytest-cov = "*"
    pytest-xdist = "*"
    pylint = "*"
    build = {extras = ["virtualenv"], version = "*"}
    twine = "*"
    sphinx = "!=5.1.0,<5.4.0"
    sphinx-rtd-theme = "*"
    teamcity-messages = "*"
    pyproject-flake8 = "*"
    myst-parser = {extras = ["linkify"], version = "*"}
    colorama = {version = "*", markers = "sys_platform == 'win32'"}
    pywin32-ctypes = {version = "*", markers = "sys_platform == 'win32'"}
    keyring = {version = "*", markers = "sys_platform == 'linux'"}
    secretstorage = {version = "*", markers = "sys_platform == 'linux'"}
    cryptography = {version = "*", markers = "sys_platform == 'linux'"}
    pycparser = {version = "*", markers = "sys_platform == 'linux'"}
    jeepney = {version = "*", markers = "sys_platform == 'linux'"}
    pyparsing = {version = "*", markers = "sys_platform == 'linux'"}
    cffi = {version = "*", markers = "sys_platform == 'linux'"}
    
    [packages]
    reality-capture-models = {editable = true, path = "."}
    
    

    Contents of Pipfile.lock ('C:\work\python-packages\reality-capture-models\Pipfile.lock'):

    {
        "_meta": {
            "hash": {
                "sha256": "fa690b06d8e8946c77bea8393c2ba198078d7567de6b56027e9bf608c4bb96fa"
            },
            "pipfile-spec": 6,
            "requires": {
                "python_version": "3.8"
            },
            "sources": [
                {
                    "name": "artifactory",
                    "url": "https://${PIPENV_USERNAME}:${PIPENV_TOKEN}@****",
                    "verify_ssl": true
                }
            ]
        },
        "default": {
            "dataclasses-json": {
                "hashes": [
                    "sha256:bc285b5f892094c3a53d558858a88553dd6a61a11ab1a8128a0e554385dcc5dd",
                    "sha256:c2c11bc8214fbf709ffc369d11446ff6945254a7f09128154a7620613d8fda90"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==0.5.7"
            },
            "marshmallow": {
                "hashes": [
                    "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78",
                    "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==3.19.0"
            },
            "marshmallow-enum": {
                "hashes": [
                    "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58",
                    "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"
                ],
                "version": "==1.5.1"
            },
            "mypy-extensions": {
                "hashes": [
                    "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
                    "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"
                ],
                "version": "==0.4.3"
            },
            "numpy": {
                "hashes": [
                    "sha256:0044f7d944ee882400890f9ae955220d29b33d809a038923d88e4e01d652acd9",
                    "sha256:0e3463e6ac25313462e04aea3fb8a0a30fb906d5d300f58b3bc2c23da6a15398",
                    "sha256:179a7ef0889ab769cc03573b6217f54c8bd8e16cef80aad369e1e8185f994cd7",
                    "sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2",
                    "sha256:26089487086f2648944f17adaa1a97ca6aee57f513ba5f1c0b7ebdabbe2b9954",
                    "sha256:28bc9750ae1f75264ee0f10561709b1462d450a4808cd97c013046073ae64ab6",
                    "sha256:28e418681372520c992805bb723e29d69d6b7aa411065f48216d8329d02ba032",
                    "sha256:442feb5e5bada8408e8fcd43f3360b78683ff12a4444670a7d9e9824c1817d36",
                    "sha256:6ec0c021cd9fe732e5bab6401adea5a409214ca5592cd92a114f7067febcba0c",
                    "sha256:7094891dcf79ccc6bc2a1f30428fa5edb1e6fb955411ffff3401fb4ea93780a8",
                    "sha256:84e789a085aabef2f36c0515f45e459f02f570c4b4c4c108ac1179c34d475ed7",
                    "sha256:87a118968fba001b248aac90e502c0b13606721b1343cdaddbc6e552e8dfb56f",
                    "sha256:8e669fbdcdd1e945691079c2cae335f3e3a56554e06bbd45d7609a6cf568c700",
                    "sha256:ad2925567f43643f51255220424c23d204024ed428afc5aad0f86f3ffc080086",
                    "sha256:b0677a52f5d896e84414761531947c7a330d1adc07c3a4372262f25d84af7bf7",
                    "sha256:b07b40f5fb4fa034120a5796288f24c1fe0e0580bbfff99897ba6267af42def2",
                    "sha256:b09804ff570b907da323b3d762e74432fb07955701b17b08ff1b5ebaa8cfe6a9",
                    "sha256:b162ac10ca38850510caf8ea33f89edcb7b0bb0dfa5592d59909419986b72407",
                    "sha256:b31da69ed0c18be8b77bfce48d234e55d040793cebb25398e2a7d84199fbc7e2",
                    "sha256:caf65a396c0d1f9809596be2e444e3bd4190d86d5c1ce21f5fc4be60a3bc5b36",
                    "sha256:cfa1161c6ac8f92dea03d625c2d0c05e084668f4a06568b77a25a89111621566",
                    "sha256:dae46bed2cb79a58d6496ff6d8da1e3b95ba09afeca2e277628171ca99b99db1",
                    "sha256:ddc7ab52b322eb1e40521eb422c4e0a20716c271a306860979d450decbb51b8e",
                    "sha256:de92efa737875329b052982e37bd4371d52cabf469f83e7b8be9bb7752d67e51",
                    "sha256:e274f0f6c7efd0d577744f52032fdd24344f11c5ae668fe8d01aac0422611df1",
                    "sha256:ed5fb71d79e771ec930566fae9c02626b939e37271ec285e9efaf1b5d4370e7d",
                    "sha256:ef85cf1f693c88c1fd229ccd1055570cb41cdf4875873b7728b6301f12cd05bf",
                    "sha256:f1b739841821968798947d3afcefd386fa56da0caf97722a5de53e07c4ccedc7"
                ],
                "markers": "python_version >= '3.8'",
                "version": "==1.24.1"
            },
            "packaging": {
                "hashes": [
                    "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3",
                    "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==22.0"
            },
            "reality-capture-models": {
                "editable": true,
                "path": "."
            },
            "typing-extensions": {
                "hashes": [
                    "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa",
                    "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==4.4.0"
            },
            "typing-inspect": {
                "hashes": [
                    "sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188",
                    "sha256:8b1ff0c400943b6145df8119c41c244ca8207f1f10c9c057aeed1560e4806e3d"
                ],
                "version": "==0.8.0"
            }
        },
        "develop": {
            "alabaster": {
                "hashes": [
                    "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
                    "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
                ],
                "version": "==0.7.12"
            },
            "astroid": {
                "hashes": [
                    "sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907",
                    "sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7"
                ],
                "markers": "python_full_version >= '3.7.2'",
                "version": "==2.12.13"
            },
            "attrs": {
                "hashes": [
                    "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836",
                    "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==22.2.0"
            },
            "babel": {
                "hashes": [
                    "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe",
                    "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==2.11.0"
            },
            "black": {
                "hashes": [
                    "sha256:101c69b23df9b44247bd88e1d7e90154336ac4992502d4197bdac35dd7ee3320",
                    "sha256:159a46a4947f73387b4d83e87ea006dbb2337eab6c879620a3ba52699b1f4351",
                    "sha256:1f58cbe16dfe8c12b7434e50ff889fa479072096d79f0a7f25e4ab8e94cd8350",
                    "sha256:229351e5a18ca30f447bf724d007f890f97e13af070bb6ad4c0a441cd7596a2f",
                    "sha256:436cc9167dd28040ad90d3b404aec22cedf24a6e4d7de221bec2730ec0c97bcf",
                    "sha256:559c7a1ba9a006226f09e4916060982fd27334ae1998e7a38b3f33a37f7a2148",
                    "sha256:7412e75863aa5c5411886804678b7d083c7c28421210180d67dfd8cf1221e1f4",
                    "sha256:77d86c9f3db9b1bf6761244bc0b3572a546f5fe37917a044e02f3166d5aafa7d",
                    "sha256:82d9fe8fee3401e02e79767016b4907820a7dc28d70d137eb397b92ef3cc5bfc",
                    "sha256:9eedd20838bd5d75b80c9f5487dbcb06836a43833a37846cf1d8c1cc01cef59d",
                    "sha256:c116eed0efb9ff870ded8b62fe9f28dd61ef6e9ddd28d83d7d264a38417dcee2",
                    "sha256:d30b212bffeb1e252b31dd269dfae69dd17e06d92b87ad26e23890f3efea366f"
                ],
                "index": "artifactory",
                "version": "==22.12.0"
            },
            "bleach": {
                "hashes": [
                    "sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a",
                    "sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==5.0.1"
            },
            "build": {
                "extras": [
                    "virtualenv"
                ],
                "hashes": [
                    "sha256:1a07724e891cbd898923145eb7752ee7653674c511378eb9c7691aab1612bc3c",
                    "sha256:38a7a2b7a0bdc61a42a0a67509d88c71ecfc37b393baba770fae34e20929ff69"
                ],
                "index": "artifactory",
                "version": "==0.9.0"
            },
            "certifi": {
                "hashes": [
                    "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3",
                    "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==2022.12.7"
            },
            "cffi": {
                "hashes": [
                    "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5",
                    "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef",
                    "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104",
                    "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426",
                    "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405",
                    "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375",
                    "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a",
                    "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e",
                    "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc",
                    "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf",
                    "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185",
                    "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497",
                    "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3",
                    "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35",
                    "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c",
                    "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83",
                    "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21",
                    "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca",
                    "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984",
                    "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac",
                    "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd",
                    "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee",
                    "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a",
                    "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2",
                    "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192",
                    "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7",
                    "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585",
                    "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f",
                    "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e",
                    "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27",
                    "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b",
                    "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e",
                    "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e",
                    "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d",
                    "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c",
                    "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415",
                    "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82",
                    "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02",
                    "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314",
                    "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325",
                    "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c",
                    "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3",
                    "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914",
                    "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045",
                    "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d",
                    "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9",
                    "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5",
                    "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2",
                    "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c",
                    "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3",
                    "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2",
                    "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8",
                    "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d",
                    "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d",
                    "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9",
                    "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162",
                    "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76",
                    "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4",
                    "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e",
                    "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9",
                    "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6",
                    "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b",
                    "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01",
                    "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==1.15.1"
            },
            "charset-normalizer": {
                "hashes": [
                    "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845",
                    "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"
                ],
                "markers": "python_full_version >= '3.6.0'",
                "version": "==2.1.1"
            },
            "click": {
                "hashes": [
                    "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e",
                    "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==8.1.3"
            },
            "colorama": {
                "hashes": [
                    "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44",
                    "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"
                ],
                "index": "artifactory",
                "markers": "sys_platform == 'win32'",
                "version": "==0.4.6"
            },
            "commonmark": {
                "hashes": [
                    "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60",
                    "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"
                ],
                "version": "==0.9.1"
            },
            "coverage": {
                "extras": [
                    "toml"
                ],
                "hashes": [
                    "sha256:037b51ee86bc600f99b3b957c20a172431c35c2ef9c1ca34bc813ab5b51fd9f5",
                    "sha256:0bce4ad5bdd0b02e177a085d28d2cea5fc57bb4ba2cead395e763e34cf934eb1",
                    "sha256:112cfead1bd22eada8a8db9ed387bd3e8be5528debc42b5d3c1f7da4ffaf9fb5",
                    "sha256:13121fa22dcd2c7b19c5161e3fd725692448f05377b788da4502a383573227b3",
                    "sha256:18b09811f849cc958d23f733a350a66b54a8de3fed1e6128ba55a5c97ffb6f65",
                    "sha256:25fde928306034e8deecd5fc91a07432dcc282c8acb76749581a28963c9f4f3f",
                    "sha256:2b865aa679bee7fbd1c55960940dbd3252621dd81468268786c67122bbd15343",
                    "sha256:2f7c51b6074a8a3063c341953dffe48fd6674f8e4b1d3c8aa8a91f58d6e716a8",
                    "sha256:349d0b545520e8516f7b4f12373afc705d17d901e1de6a37a20e4ec9332b61f7",
                    "sha256:44d6a556de4418f1f3bfd57094b8c49f0408df5a433cf0d253eeb3075261c762",
                    "sha256:4959dc506be74e4963bd2c42f7b87d8e4b289891201e19ec551e64c6aa5441f8",
                    "sha256:49da0ff241827ebb52d5d6d5a36d33b455fa5e721d44689c95df99fd8db82437",
                    "sha256:55e46fa4168ccb7497c9be78627fcb147e06f474f846a10d55feeb5108a24ef0",
                    "sha256:5722269ed05fbdb94eef431787c66b66260ff3125d1a9afcc00facff8c45adf9",
                    "sha256:628f47eaf66727fc986d3b190d6fa32f5e6b7754a243919d28bc0fd7974c449f",
                    "sha256:62ef3800c4058844e2e3fa35faa9dd0ccde8a8aba6c763aae50342e00d4479d4",
                    "sha256:75e43c6f4ea4d122dac389aabdf9d4f0e160770a75e63372f88005d90f5bcc80",
                    "sha256:7e8b0642c38b3d3b3c01417643ccc645345b03c32a2e84ef93cdd6844d6fe530",
                    "sha256:88834e5d56d01c141c29deedacba5773fe0bed900b1edc957595a8a6c0da1c3c",
                    "sha256:985ad2af5ec3dbb4fd75d5b0735752c527ad183455520055a08cf8d6794cabfc",
                    "sha256:a530663a361eb27375cec28aea5cd282089b5e4b022ae451c4c3493b026a68a5",
                    "sha256:acef7f3a3825a2d218a03dd02f5f3cc7f27aa31d882dd780191d1ad101120d74",
                    "sha256:ae871d09901911eedda1981ea6fd0f62a999107293cdc4c4fd612321c5b34745",
                    "sha256:af6cef3796b8068713a48dd67d258dc9a6e2ebc3bd4645bfac03a09672fa5d20",
                    "sha256:af87e906355fa42447be5c08c5d44e6e1c005bf142f303f726ddf5ed6e0c8a4d",
                    "sha256:b07651e3b9af8f1a092861d88b4c74d913634a7f1f2280fca0ad041ad84e9e96",
                    "sha256:b1ffc8f58b81baed3f8962e28c30d99442079b82ce1ec836a1f67c0accad91c1",
                    "sha256:b5b38813eee5b4739f505d94247604c72eae626d5088a16dd77b08b8b1724ab3",
                    "sha256:b791beb17b32ac019a78cfbe6184f992b6273fdca31145b928ad2099435e2fcb",
                    "sha256:b82343a5bc51627b9d606f0b6b6b9551db7b6311a5dd920fa52a94beae2e8959",
                    "sha256:ba9af1218fa01b1f11c72271bc7290b701d11ad4dbc2ae97c445ecacf6858dba",
                    "sha256:bdbda870e0fda7dd0fe7db7135ca226ec4c1ade8aa76e96614829b56ca491012",
                    "sha256:bf76d79dfaea802f0f28f50153ffbc1a74ae1ee73e480baeda410b4f3e7ab25f",
                    "sha256:c1cee10662c25c94415bbb987f2ec0e6ba9e8fce786334b10be7e6a7ab958f69",
                    "sha256:c5648c7eec5cf1ba5db1cf2d6c10036a582d7f09e172990474a122e30c841361",
                    "sha256:c58cd6bb46dcb922e0d5792850aab5964433d511b3a020867650f8d930dde4f4",
                    "sha256:c5d9b480ebae60fc2cbc8d6865194136bc690538fa542ba58726433bed6e04cc",
                    "sha256:ca15308ef722f120967af7474ba6a453e0f5b6f331251e20b8145497cf1bc14a",
                    "sha256:d0df04495b76a885bfef009f45eebe8fe2fbf815ad7a83dabcf5aced62f33162",
                    "sha256:d5be4e93acce64f516bf4fd239c0e6118fc913c93fa1a3f52d15bdcc60d97b2d",
                    "sha256:d8249666c23683f74f8f93aeaa8794ac87cc61c40ff70374a825f3352a4371dc",
                    "sha256:e3f1cd1cd65695b1540b3cf7828d05b3515974a9d7c7530f762ac40f58a18161",
                    "sha256:e56fae4292e216b8deeee38ace84557b9fa85b52db005368a275427cdabb8192",
                    "sha256:e6dcc70a25cb95df0ae33dfc701de9b09c37f7dd9f00394d684a5b57257f8246",
                    "sha256:e89d5abf86c104de808108a25d171ad646c07eda96ca76c8b237b94b9c71e518",
                    "sha256:ed7c9debf7bfc63c9b9f8b595409237774ff4b061bf29fba6f53b287a2fdeab9",
                    "sha256:ef001a60e888f8741e42e5aa79ae55c91be73761e4df5e806efca1ddd62fd400",
                    "sha256:f30090e22a301952c5abd0e493a1c8358b4f0b368b49fa3e4568ed3ed68b8d1f",
                    "sha256:f79691335257d60951638dd43576b9bcd6f52baa5c1c2cd07a509bb003238372",
                    "sha256:f918e9ef4c98f477a5458238dde2a1643aed956c7213873ab6b6b82e32b8ef61",
                    "sha256:fd0a8aa431f9b7ad9eb8264f55ef83cbb254962af3775092fb6e93890dea9ca2"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==7.0.3"
            },
            "cryptography": {
                "hashes": [
                    "sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b",
                    "sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f",
                    "sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190",
                    "sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f",
                    "sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f",
                    "sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb",
                    "sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c",
                    "sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773",
                    "sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72",
                    "sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8",
                    "sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717",
                    "sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9",
                    "sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856",
                    "sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96",
                    "sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288",
                    "sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39",
                    "sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e",
                    "sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce",
                    "sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1",
                    "sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de",
                    "sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df",
                    "sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf",
                    "sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==39.0.0"
            },
            "dill": {
                "hashes": [
                    "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0",
                    "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"
                ],
                "markers": "python_version < '3.11'",
                "version": "==0.3.6"
            },
            "distlib": {
                "hashes": [
                    "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46",
                    "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"
                ],
                "version": "==0.3.6"
            },
            "docutils": {
                "hashes": [
                    "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125",
                    "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
                "version": "==0.17.1"
            },
            "exceptiongroup": {
                "hashes": [
                    "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e",
                    "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"
                ],
                "markers": "python_version < '3.11'",
                "version": "==1.1.0"
            },
            "execnet": {
                "hashes": [
                    "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5",
                    "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
                "version": "==1.9.0"
            },
            "filelock": {
                "hashes": [
                    "sha256:7b319f24340b51f55a2bf7a12ac0755a9b03e718311dac567a0f4f7fabd2f5de",
                    "sha256:f58d535af89bb9ad5cd4df046f741f8553a418c01a7856bf0d173bbc9f6bd16d"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==3.9.0"
            },
            "flake8": {
                "hashes": [
                    "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7",
                    "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"
                ],
                "markers": "python_full_version >= '3.8.1'",
                "version": "==6.0.0"
            },
            "idna": {
                "hashes": [
                    "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4",
                    "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==3.4"
            },
            "imagesize": {
                "hashes": [
                    "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b",
                    "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
                "version": "==1.4.1"
            },
            "importlib-metadata": {
                "hashes": [
                    "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad",
                    "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"
                ],
                "markers": "python_version < '3.10'",
                "version": "==6.0.0"
            },
            "importlib-resources": {
                "hashes": [
                    "sha256:7d543798b0beca10b6a01ac7cafda9f822c54db9e8376a6bf57e0cbd74d486b6",
                    "sha256:e4a96c8cc0339647ff9a5e0550d9f276fc5a01ffa276012b58ec108cfd7b8484"
                ],
                "markers": "python_version < '3.9'",
                "version": "==5.10.2"
            },
            "iniconfig": {
                "hashes": [
                    "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3",
                    "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"
                ],
                "version": "==1.1.1"
            },
            "isort": {
                "hashes": [
                    "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6",
                    "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b"
                ],
                "index": "artifactory",
                "version": "==5.11.4"
            },
            "jaraco.classes": {
                "hashes": [
                    "sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158",
                    "sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==3.2.3"
            },
            "jeepney": {
                "hashes": [
                    "sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806",
                    "sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==0.8.0"
            },
            "jinja2": {
                "hashes": [
                    "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
                    "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==3.1.2"
            },
            "keyring": {
                "hashes": [
                    "sha256:771ed2a91909389ed6148631de678f82ddc73737d85a927f382a8a1b157898cd",
                    "sha256:ba2e15a9b35e21908d0aaf4e0a47acc52d6ae33444df0da2b49d41a46ef6d678"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==23.13.1"
            },
            "lazy-object-proxy": {
                "hashes": [
                    "sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada",
                    "sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d",
                    "sha256:4e2d9f764f1befd8bdc97673261b8bb888764dfdbd7a4d8f55e4fbcabb8c3fb7",
                    "sha256:4fd031589121ad46e293629b39604031d354043bb5cdf83da4e93c2d7f3389fe",
                    "sha256:5b51d6f3bfeb289dfd4e95de2ecd464cd51982fe6f00e2be1d0bf94864d58acd",
                    "sha256:6850e4aeca6d0df35bb06e05c8b934ff7c533734eb51d0ceb2d63696f1e6030c",
                    "sha256:6f593f26c470a379cf7f5bc6db6b5f1722353e7bf937b8d0d0b3fba911998858",
                    "sha256:71d9ae8a82203511a6f60ca5a1b9f8ad201cac0fc75038b2dc5fa519589c9288",
                    "sha256:7e1561626c49cb394268edd00501b289053a652ed762c58e1081224c8d881cec",
                    "sha256:8f6ce2118a90efa7f62dd38c7dbfffd42f468b180287b748626293bf12ed468f",
                    "sha256:ae032743794fba4d171b5b67310d69176287b5bf82a21f588282406a79498891",
                    "sha256:afcaa24e48bb23b3be31e329deb3f1858f1f1df86aea3d70cb5c8578bfe5261c",
                    "sha256:b70d6e7a332eb0217e7872a73926ad4fdc14f846e85ad6749ad111084e76df25",
                    "sha256:c219a00245af0f6fa4e95901ed28044544f50152840c5b6a3e7b2568db34d156",
                    "sha256:ce58b2b3734c73e68f0e30e4e725264d4d6be95818ec0a0be4bb6bf9a7e79aa8",
                    "sha256:d176f392dbbdaacccf15919c77f526edf11a34aece58b55ab58539807b85436f",
                    "sha256:e20bfa6db17a39c706d24f82df8352488d2943a3b7ce7d4c22579cb89ca8896e",
                    "sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0",
                    "sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==1.8.0"
            },
            "linkify-it-py": {
                "hashes": [
                    "sha256:11e29f00150cddaa8f434153f103c14716e7e097a8fd372d9eb1ed06ed91524d",
                    "sha256:2b3f168d5ce75e3a425e34b341a6b73e116b5d9ed8dbbbf5dc7456843b7ce2ee"
                ],
                "version": "==1.0.3"
            },
            "markdown-it-py": {
                "hashes": [
                    "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27",
                    "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==2.1.0"
            },
            "markupsafe": {
                "hashes": [
                    "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003",
                    "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88",
                    "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5",
                    "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7",
                    "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a",
                    "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603",
                    "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1",
                    "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135",
                    "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247",
                    "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6",
                    "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601",
                    "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77",
                    "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02",
                    "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e",
                    "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63",
                    "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f",
                    "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980",
                    "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b",
                    "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812",
                    "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff",
                    "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96",
                    "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1",
                    "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925",
                    "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a",
                    "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6",
                    "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e",
                    "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f",
                    "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4",
                    "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f",
                    "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3",
                    "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c",
                    "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a",
                    "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417",
                    "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a",
                    "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a",
                    "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37",
                    "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452",
                    "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933",
                    "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a",
                    "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==2.1.1"
            },
            "mccabe": {
                "hashes": [
                    "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
                    "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==0.7.0"
            },
            "mdit-py-plugins": {
                "hashes": [
                    "sha256:36d08a29def19ec43acdcd8ba471d3ebab132e7879d442760d963f19913e04b9",
                    "sha256:5cfd7e7ac582a594e23ba6546a2f406e94e42eb33ae596d0734781261c251260"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==0.3.3"
            },
            "mdurl": {
                "hashes": [
                    "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8",
                    "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==0.1.2"
            },
            "more-itertools": {
                "hashes": [
                    "sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41",
                    "sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==9.0.0"
            },
            "mypy-extensions": {
                "hashes": [
                    "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
                    "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"
                ],
                "version": "==0.4.3"
            },
            "myst-parser": {
                "extras": [
                    "linkify"
                ],
                "hashes": [
                    "sha256:61b275b85d9f58aa327f370913ae1bec26ebad372cc99f3ab85c8ec3ee8d9fb8",
                    "sha256:79317f4bb2c13053dd6e64f9da1ba1da6cd9c40c8a430c447a7b146a594c246d"
                ],
                "index": "artifactory",
                "version": "==0.18.1"
            },
            "packaging": {
                "hashes": [
                    "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3",
                    "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==22.0"
            },
            "pathspec": {
                "hashes": [
                    "sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6",
                    "sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==0.10.3"
            },
            "pep517": {
                "hashes": [
                    "sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b",
                    "sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==0.13.0"
            },
            "pkginfo": {
                "hashes": [
                    "sha256:37e77722f0e16758e5f360098ced6bc5cfc19e5d3d410507a0c3a5d648df5b7c",
                    "sha256:76eac3a1c370e1505a771ed98a7e33b4546fe3650fd719e6c57ebb4393c20768"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==1.9.3"
            },
            "platformdirs": {
                "hashes": [
                    "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490",
                    "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==2.6.2"
            },
            "pluggy": {
                "hashes": [
                    "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159",
                    "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==1.0.0"
            },
            "pycodestyle": {
                "hashes": [
                    "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053",
                    "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==2.10.0"
            },
            "pycparser": {
                "hashes": [
                    "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9",
                    "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==2.21"
            },
            "pyflakes": {
                "hashes": [
                    "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf",
                    "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==3.0.1"
            },
            "pygments": {
                "hashes": [
                    "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297",
                    "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==2.14.0"
            },
            "pylint": {
                "hashes": [
                    "sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4",
                    "sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb"
                ],
                "index": "artifactory",
                "version": "==2.15.9"
            },
            "pyparsing": {
                "hashes": [
                    "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb",
                    "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==3.0.9"
            },
            "pyproject-flake8": {
                "hashes": [
                    "sha256:bdc7ca9b967b9724983903489b8943b72c668178fb69f03e8774ec74f6a13782",
                    "sha256:d43421caca0ef8a672874405fe63c722b0333e3c22c41648c6df60f21bab2b6b"
                ],
                "index": "artifactory",
                "version": "==6.0.0.post1"
            },
            "pytest": {
                "hashes": [
                    "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71",
                    "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59"
                ],
                "index": "artifactory",
                "version": "==7.2.0"
            },
            "pytest-cov": {
                "hashes": [
                    "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b",
                    "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"
                ],
                "index": "artifactory",
                "version": "==4.0.0"
            },
            "pytest-xdist": {
                "hashes": [
                    "sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c",
                    "sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89"
                ],
                "index": "artifactory",
                "version": "==3.1.0"
            },
            "pytz": {
                "hashes": [
                    "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a",
                    "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd"
                ],
                "version": "==2022.7"
            },
            "pywin32-ctypes": {
                "hashes": [
                    "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942",
                    "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"
                ],
                "index": "artifactory",
                "markers": "sys_platform == 'win32'",
                "version": "==0.2.0"
            },
            "pyyaml": {
                "hashes": [
                    "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf",
                    "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293",
                    "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b",
                    "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57",
                    "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b",
                    "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4",
                    "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07",
                    "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba",
                    "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9",
                    "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287",
                    "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513",
                    "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0",
                    "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782",
                    "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0",
                    "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92",
                    "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f",
                    "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2",
                    "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc",
                    "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1",
                    "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c",
                    "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86",
                    "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4",
                    "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c",
                    "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34",
                    "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b",
                    "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d",
                    "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c",
                    "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb",
                    "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7",
                    "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737",
                    "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3",
                    "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d",
                    "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358",
                    "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53",
                    "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78",
                    "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803",
                    "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a",
                    "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f",
                    "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174",
                    "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==6.0"
            },
            "readme-renderer": {
                "hashes": [
                    "sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273",
                    "sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==37.3"
            },
            "requests": {
                "hashes": [
                    "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983",
                    "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"
                ],
                "markers": "python_version >= '3.7' and python_version < '4'",
                "version": "==2.28.1"
            },
            "requests-toolbelt": {
                "hashes": [
                    "sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7",
                    "sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
                "version": "==0.10.1"
            },
            "rfc3986": {
                "hashes": [
                    "sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd",
                    "sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==2.0.0"
            },
            "rich": {
                "hashes": [
                    "sha256:12b1d77ee7edf251b741531323f0d990f5f570a4e7c054d0bfb59fb7981ad977",
                    "sha256:3aa9eba7219b8c575c6494446a59f702552efe1aa261e7eeb95548fa586e1950"
                ],
                "markers": "python_full_version >= '3.7.0'",
                "version": "==13.0.0"
            },
            "secretstorage": {
                "hashes": [
                    "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77",
                    "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99"
                ],
                "markers": "sys_platform == 'linux'",
                "version": "==3.3.3"
            },
            "six": {
                "hashes": [
                    "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
                    "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
                "version": "==1.16.0"
            },
            "snowballstemmer": {
                "hashes": [
                    "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1",
                    "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"
                ],
                "version": "==2.2.0"
            },
            "sphinx": {
                "hashes": [
                    "sha256:060ca5c9f7ba57a08a1219e547b269fadf125ae25b06b9fa7f66768efb652d6d",
                    "sha256:51026de0a9ff9fc13c05d74913ad66047e104f56a129ff73e174eb5c3ee794b5"
                ],
                "index": "artifactory",
                "version": "==5.3.0"
            },
            "sphinx-rtd-theme": {
                "hashes": [
                    "sha256:31faa07d3e97c8955637fc3f1423a5ab2c44b74b8cc558a51498c202ce5cbda7",
                    "sha256:6146c845f1e1947b3c3dd4432c28998a1693ccc742b4f9ad7c63129f0757c103"
                ],
                "index": "artifactory",
                "version": "==1.1.1"
            },
            "sphinxcontrib-applehelp": {
                "hashes": [
                    "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a",
                    "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==1.0.2"
            },
            "sphinxcontrib-devhelp": {
                "hashes": [
                    "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e",
                    "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==1.0.2"
            },
            "sphinxcontrib-htmlhelp": {
                "hashes": [
                    "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07",
                    "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==2.0.0"
            },
            "sphinxcontrib-jsmath": {
                "hashes": [
                    "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178",
                    "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==1.0.1"
            },
            "sphinxcontrib-qthelp": {
                "hashes": [
                    "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72",
                    "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==1.0.3"
            },
            "sphinxcontrib-serializinghtml": {
                "hashes": [
                    "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd",
                    "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"
                ],
                "markers": "python_version >= '3.5'",
                "version": "==1.1.5"
            },
            "teamcity-messages": {
                "hashes": [
                    "sha256:1dbd30e24e80ee80083a5ce01d8898c8157a974fd7cd13ee219834b918f4ab8c",
                    "sha256:6991d95642c8d067524c90985b650d89caab6ac0bf47b721b931b04951abbfc1"
                ],
                "index": "artifactory",
                "version": "==1.32"
            },
            "tomli": {
                "hashes": [
                    "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
                    "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"
                ],
                "markers": "python_full_version < '3.11.0a7'",
                "version": "==2.0.1"
            },
            "tomlkit": {
                "hashes": [
                    "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b",
                    "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==0.11.6"
            },
            "twine": {
                "hashes": [
                    "sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8",
                    "sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8"
                ],
                "index": "artifactory",
                "version": "==4.0.2"
            },
            "typing-extensions": {
                "hashes": [
                    "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa",
                    "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==4.4.0"
            },
            "uc-micro-py": {
                "hashes": [
                    "sha256:316cfb8b6862a0f1d03540f0ae6e7b033ff1fa0ddbe60c12cbe0d4cec846a69f",
                    "sha256:b7cdf4ea79433043ddfe2c82210208f26f7962c0cfbe3bacb05ee879a7fdb596"
                ],
                "markers": "python_version >= '3.6'",
                "version": "==1.0.1"
            },
            "urllib3": {
                "hashes": [
                    "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc",
                    "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"
                ],
                "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
                "version": "==1.26.13"
            },
            "virtualenv": {
                "hashes": [
                    "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4",
                    "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"
                ],
                "version": "==20.17.1"
            },
            "webencodings": {
                "hashes": [
                    "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
                    "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
                ],
                "version": "==0.5.1"
            },
            "wrapt": {
                "hashes": [
                    "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3",
                    "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b",
                    "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4",
                    "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2",
                    "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656",
                    "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3",
                    "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff",
                    "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310",
                    "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a",
                    "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57",
                    "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069",
                    "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383",
                    "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe",
                    "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87",
                    "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d",
                    "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b",
                    "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907",
                    "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f",
                    "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0",
                    "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28",
                    "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1",
                    "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853",
                    "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc",
                    "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3",
                    "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3",
                    "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164",
                    "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1",
                    "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c",
                    "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1",
                    "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7",
                    "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1",
                    "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320",
                    "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed",
                    "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1",
                    "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248",
                    "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c",
                    "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456",
                    "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77",
                    "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef",
                    "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1",
                    "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7",
                    "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86",
                    "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4",
                    "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d",
                    "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d",
                    "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8",
                    "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5",
                    "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471",
                    "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00",
                    "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68",
                    "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3",
                    "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d",
                    "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735",
                    "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d",
                    "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569",
                    "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7",
                    "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59",
                    "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5",
                    "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb",
                    "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b",
                    "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f",
                    "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462",
                    "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015",
                    "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"
                ],
                "markers": "python_version < '3.11'",
                "version": "==1.14.1"
            },
            "zipp": {
                "hashes": [
                    "sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa",
                    "sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766"
                ],
                "markers": "python_version >= '3.7'",
                "version": "==3.11.0"
            }
        }
    }
    
    

    </details/

    Type: Enhancement :bulb: Type: Vendored Dependencies Category: Pip 
    opened by kolibri91 5
  • Using pipenv shell or other pip commands shows AttributeError: 'AnsiToWin32' object has no attribute 'fileno'

    Using pipenv shell or other pip commands shows AttributeError: 'AnsiToWin32' object has no attribute 'fileno'

    I recently got into python and django and decided to use pipenv for virtual environments, it installed just fine. But when using pipenv shell or other pipenv commands like pipenv install requests. I always get the following error (on Windows cmd/powershell)

    pipenv shell shows the error below.

    Creating a virtualenv for this project...
    Pipfile: C:\Users\samue\Desktop\helloWorld\Pipfile
    Using C:/Users/samue/AppData/Local/Programs/Python/Python310/python.exe (3.10.9) to create virtualenv...
    created virtual environment CPython3.10.9.final.0-64 in 687ms
      creator CPython3Windows(dest=C:\Users\samue\.virtualenvs\helloWorld-OnoJB8yo, clear=False, no_vcs_ignore=False, global
    =False)
      seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\samue\
    AppData\Local\pypa\virtualenv)
        added seed packages: pip==22.3.1, setuptools==65.6.3, wheel==0.38.4
      activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
    
    Traceback (most recent call last):
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\core.py", line 1041, in do_creat
    e_virtualenv
        err.print(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 1646, in print
        with self:
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 848, in __exit__
        self._exit_buffer()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 806, in _exit_buffer
        self._check_buffer()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 1990, in _check_buffer
        self.file.fileno() in _STD_STREAMS_OUTPUT
    AttributeError: 'AnsiToWin32' object has no attribute 'fileno'
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
        exec(code, run_globals)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\Scripts\pipenv.exe\__main__.py", line 7, in <module>
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 1128
    , in __call__
        return self.main(*args, **kwargs)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\cli\options.py", line 57, in mai
    n
        return super().main(*args, **kwargs, windows_expand_args=False)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 1053
    , in main
        rv = self.invoke(ctx)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 1659
    , in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 1395
    , in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 754,
     in invoke
        return __callback(*args, **kwargs)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\decorators.py", lin
    e 84, in new_func
        return ctx.invoke(f, obj, *args, **kwargs)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\vendor\click\core.py", line 754,
     in invoke
        return __callback(*args, **kwargs)
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\cli\command.py", line 402, in sh
    ell
        do_shell(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\core.py", line 2641, in do_shell
    
        ensure_project(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\core.py", line 541, in ensure_pr
    oject
        ensure_virtualenv(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\core.py", line 474, in ensure_vi
    rtualenv
        do_create_virtualenv(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\core.py", line 1025, in do_creat
    e_virtualenv
        with console.status(
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\status.
    py", line 106, in __exit__
        self.stop()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\status.
    py", line 91, in stop
        self._live.stop()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\live.py
    ", line 147, in stop
        with self.console:
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 848, in __exit__
        self._exit_buffer()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 806, in _exit_buffer
        self._check_buffer()
      File "C:\Users\samue\AppData\Local\Programs\Python\Python310\lib\site-packages\pipenv\patched\pip\_vendor\rich\console
    .py", line 1990, in _check_buffer
        self.file.fileno() in _STD_STREAMS_OUTPUT
    AttributeError: 'AnsiToWin32' object has no attribute 'fileno'
    

    Running $ pipenv --support, gave the following output:

    $ pipenv --support

    Pipenv version: '2022.12.19'

    Pipenv location: 'C:\\Users\\samue\\AppData\\Local\\Programs\\Python\\Python310\\lib\\site-packages\\pipenv'

    Python location: 'C:\\Users\\samue\\AppData\\Local\\Programs\\Python\\Python310\\python.exe'

    OS Name: 'nt'

    User pip version: '22.3.1'

    user Python installations found:

    • 3.10.9: C:\Users\samue\AppData\Local\Programs\Python\Python310\python.exe

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '3.10.9',
     'os_name': 'nt',
     'platform_machine': 'AMD64',
     'platform_python_implementation': 'CPython',
     'platform_release': '10',
     'platform_system': 'Windows',
     'platform_version': '10.0.19044',
     'python_full_version': '3.10.9',
     'python_version': '3.10',
     'sys_platform': 'win32'}
    

    System environment variables:

    • ALLUSERSPROFILE
    • APPDATA
    • COMMONPROGRAMFILES
    • COMMONPROGRAMFILES(X86)
    • COMMONPROGRAMW6432
    • COMPUTERNAME
    • COMSPEC
    • DRIVERDATA
    • FPS_BROWSER_APP_PROFILE_STRING
    • FPS_BROWSER_USER_PROFILE_STRING
    • HOMEDRIVE
    • HOMEPATH
    • LOCALAPPDATA
    • LOGONSERVER
    • NUMBER_OF_PROCESSORS
    • ONEDRIVE
    • ONEDRIVECONSUMER
    • OS
    • PATH
    • PATHEXT
    • PROCESSOR_ARCHITECTURE
    • PROCESSOR_IDENTIFIER
    • PROCESSOR_LEVEL
    • PROCESSOR_REVISION
    • PROGRAMDATA
    • PROGRAMFILES
    • PROGRAMFILES(X86)
    • PROGRAMW6432
    • PSMODULEPATH
    • PUBLIC
    • SESSIONNAME
    • SYNAPROGDIR
    • SYSTEMDRIVE
    • SYSTEMROOT
    • TEMP
    • TMP
    • USERDOMAIN
    • USERDOMAIN_ROAMINGPROFILE
    • USERNAME
    • USERPROFILE
    • WINDIR
    • ZES_ENABLE_SYSMAN
    • PIP_DISABLE_PIP_VERSION_CHECK
    • PIP_PYTHON_PATH
    • PYTHONDONTWRITEBYTECODE
    • PYTHONFINDER_IGNORE_UNSUPPORTED

    Pipenv?specific environment variables:

    Debug?specific environment variables:

    • PATH: C:\Program Files\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-19\bin;C:\Users\samue\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\samue\AppData\Local\Programs\Python\Python310\;C:\Users\samue\AppData\Local\Microsoft\WindowsApps;C:\src\flutter\bin;C:\Users\samue\AppData\Local\Programs\Microsoft VS Code\bin;C:\src\flutter\bin\cache\dart-sdk\bin

    PS: I tried this on python 3.11.1 and had the same issue.

    Status: Needs More Information Windows 
    opened by rahulmukh1ya 5
  • check with v2022.10.12 detects 52365 but v2022.12.19 does not

    check with v2022.10.12 detects 52365 but v2022.12.19 does not

    $ pipenv check
    Checking PEP 508 requirements...
    Passed!
    Checking installed package safety...
    52365: certifi <2022.12.07 resolved (2022.9.24 installed)!
    Certifi 2022.12.07 includes a fix for CVE-2022-23491: Certifi 2022.12.07 removes root certificates from "TrustCor" from the root store. These are in the process of being removed from Mozilla's trust store. TrustCor's root certificates are being removed pursuant to an investigation prompted by media reporting that TrustCor's ownership also operated a business that produced spyware. Conclusions of Mozilla's investigation can be found in the linked google group discussion.
    https://github.com/certifi/python-certifi/security/advisories/GHSA-43fp-rhv2-5gv8
    https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/oxX69KFvsm4/m/yLohoVqtCgAJ
    
    $ pipenv --version
    pipenv, version 2022.10.12
    
    $ pipx upgrade-all
    upgraded package pipenv from 2022.10.12 to 2022.12.19 (location: ...)
    
    $ pipenv check
    Checking PEP 508 requirements...
    Passed!
    Checking installed packages for vulnerabilities...
    +================================================================+
    
                                   /$$$$$$            /$$
                                  /$$__  $$          | $$
               /$$$$$$$  /$$$$$$ | $$  \__//$$$$$$  /$$$$$$   /$$   /$$
              /$$_____/ |____  $$| $$$$   /$$__  $$|_  $$_/  | $$  | $$
             |  $$$$$$   /$$$$$$$| $$_/  | $$$$$$$$  | $$    | $$  | $$
              \____  $$ /$$__  $$| $$    | $$_____/  | $$ /$$| $$  | $$
              /$$$$$$$/|  $$$$$$$| $$    |  $$$$$$$  |  $$$$/|  $$$$$$$
             |_______/  \_______/|__/     \_______/   \___/   \____  $$
                                                              /$$  | $$
                                                             |  $$$$$$/
      by pyup.io                                              \______/
    
    +================================================================+
    
     REPORT 
    
      Safety v2.3.2 is scanning for
        Vulnerabilities...
      Scanning dependencies in your files:
    
      -> /tmp/searents-IxmFmDqUs1z0p52e_requirements.txt
    
      Found and scanned 12 packages
      Timestamp 2023-01-01 18:48:02
      0 vulnerabilities found
      0 vulnerabilities ignored
    +================================================================+
    
     No known security vulnerabilities found. 
    
    +================================================================+
    $ pipenv graph | grep certifi
        - certifi [required: >=2017.4.17, installed: 2022.9.24
    $ pipenv --version
    pipenv, version 2022.12.19
    
    Type: Regression triage 
    opened by dmtucker 2
  • Prepare environement with my custom package

    Prepare environement with my custom package

    Issue description

    Using custom dependencies git+ssh described in local package module pyproject.toml well working in poetry does not work with pipenv.

    Expected result

    Clone git+ssh private repository and continue working.

    Actual result

    Error message:

    $ pipenv install -e .
    Installing -e ....
    â ´ Installing ***...[31m[1mError: [0m An error occurred while installing [32m-e .[0m!
    Error text: Obtaining file:///*** (from -r /tmp/pipenv-adguwfr_-requirements/pipenv-zhdvnob6-requirement.txt (line 1))
      Installing build dependencies: started
      Installing build dependencies: finished with status 'done'
      Checking if build backend supports build_editable: started
      Checking if build backend supports build_editable: finished with status 'done'
      Getting requirements to build editable: started
      Getting requirements to build editable: finished with status 'done'
      Preparing editable metadata (pyproject.toml): started
      Preparing editable metadata (pyproject.toml): finished with status 'done'
    Collecting ***@ git+git+ssh://...@[email protected]
    
    [36mERROR: Could not install packages due to an OSError: No connection adapters were found for 
    'git+git+ssh://...'
    
    Type: Possible Bug triage 
    opened by vsedyshev-intermedia 5
  • Pipenv `install` throws `Value is not a valid boolean-like` error for truthy `CI` environment variables

    Pipenv `install` throws `Value is not a valid boolean-like` error for truthy `CI` environment variables

    Issue description

    When installing dependencies with pipenv inside a Woodpecker pipeline the job fails with the following error: ValueError: Value is not a valid boolean-like: woodpecker when the following environment variable (default for woodpecker) is set: CI=woodpecker

    Expected result

    The pipenv installation step should not fail when the environment variable CI is set to a truthy value like "woodpecker".

    Actual result

    The installation step fails because pipenv treats "woodpecker" not as a truthy environment variable value.

    Full output:

    installing pipenv...
    done! ✨ 🌟 ✨
      installed package pipenv 2022.11.30, installed using Python 3.8.12
      These apps are now globally available
        - pipenv
        - pipenv-resolver
    + pipenv install --dev --skip-lock
    Error in sys.excepthook:
    Traceback (most recent call last):
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/exceptions.py", line 35, in handle_exception
        if environments.Setting().is_verbose() or not issubclass(exc_type, ClickException):
    AttributeError: module 'pipenv.environments' has no attribute 'Setting'
    
    Original exception was:
    Traceback (most recent call last):
      File "/root/.local/bin/pipenv", line 5, in <module>
        from pipenv import cli
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/__init__.py", line 58, in <module>
        from .cli import cli
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/cli/__init__.py", line 1, in <module>
        from .command import cli  # noqa
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/cli/command.py", line 4, in <module>
        from pipenv import environments
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/environments.py", line 80, in <module>
        PIPENV_IS_CI = is_env_truthy("CI") or is_env_truthy("TF_BUILD")
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/utils/shell.py", line 419, in is_env_truthy
        return env_to_bool(os.getenv(name, False))
      File "/root/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/utils/shell.py", line 414, in env_to_bool
        raise ValueError(f"Value is not a valid boolean-like: {val}")
    ValueError: Value is not a valid boolean-like: woodpecker
    

    Steps to replicate

    Set the environment value CI to a "truthy" value other than "1", "true", "yes", "on".

    Currently, pipenv uses is_env_truthy (https://github.com/pypa/pipenv/blob/main/pipenv/environments.py#L80) which itself calls env_to_bool to decide if the CI env variable is truthy. True values are currently restricted in the constant TRUE_VALUES = ("1", "true", "yes", "on").

    In a comment for the method is_env_truthy it says "An environment variable is truthy if it exists and isn't one of (0, false, no, off)" (which would be, imo, the correct and expected behavior) which contradicts the implemented logic.

    I found this related Issue: https://github.com/pypa/pipenv/issues/5128

    On nov 2 there was a refactoring of said methods: https://github.com/pypa/pipenv/commit/38813b96b8a978356628fc33a6779ea7f653926c

    Type: Enhancement :bulb: Type: Regression 
    opened by jodem1 3
  • Reproducable requriements with --hash

    Reproducable requriements with --hash

    Running outputs different output on each run.

    pipenv requirements --hash
    

    First run:

    asgiref==3.5.2 --hash=sha256:a413aa29c850b32a088487ef562d133240b918c9060e0c76e2c377a3fd0e5a94 --hash=sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424
    

    Second run:

    asgiref==3.5.2 --hash=sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424 --hash=sha256:a413aa29c850b32a088487ef562d133240b918c9060e0c76e2c377a3fd0e5a94
    

    To keep the builds reproducible it would be best to leave hashes in the same order as they are in lock file.


    $ pipenv --support

    Pipenv version: '2022.12.19'

    Pipenv location: '/Users/[user]/.virtualenvs/bitstamp38/lib/python3.8/site-packages/pipenv'

    Python location: '/Users/[user]/.virtualenvs/bitstamp38/bin/python3'

    OS Name: 'posix'

    User pip version: '22.3.1'

    PEP 508 Information:

    {'implementation_name': 'cpython',
     'implementation_version': '3.8.13',
     'os_name': 'posix',
     'platform_machine': 'x86_64',
     'platform_python_implementation': 'CPython',
     'platform_release': '22.2.0',
     'platform_system': 'Darwin',
     'platform_version': 'Darwin Kernel Version 22.2.0: Fri Nov 11 02:08:47 PST '
                         '2022; root:xnu-8792.61.2~4/RELEASE_X86_64',
     'python_full_version': '3.8.13',
     'python_version': '3.8',
     'sys_platform': 'darwin'}
    
    Type: Enhancement :bulb: Type: Possible Bug 
    opened by matejsp 0
Releases(v2022.12.19)
  • v2022.12.19(Dec 19, 2022)

    What's Changed

    • Bump certifi from 2018.10.15 to 2022.12.7 by @dependabot in https://github.com/pypa/pipenv/pull/5527
    • Fix Readme.md links. by @matteius in https://github.com/pypa/pipenv/pull/5547
    • Issue 5546 by @matteius in https://github.com/pypa/pipenv/pull/5548

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.12.17...v2022.12.19

    Source code(tar.gz)
    Source code(zip)
  • v2022.12.17(Dec 17, 2022)

    What's Changed

    • Fix issue with venv module not being available on some systems. by @matteius in https://github.com/pypa/pipenv/pull/5518
    • Fix spelling error in docs/quickstart.rst by @efinkler-dm in https://github.com/pypa/pipenv/pull/5516
    • Fix ruamel vendoring by @matteius in https://github.com/pypa/pipenv/pull/5519
    • vendor in Pip 22.3.1 by @matteius in https://github.com/pypa/pipenv/pull/5520
    • More vendor bumps by @oz123 in https://github.com/pypa/pipenv/pull/5522
    • fixed broken link to non-existing philosophy subpage by @piraartur in https://github.com/pypa/pipenv/pull/5524
    • Fix regression where wheel path is not included in the lockfile by @matteius in https://github.com/pypa/pipenv/pull/5523
    • Bump certifi from 2017.7.27.1 to 2022.12.7 in /examples by @dependabot in https://github.com/pypa/pipenv/pull/5525
    • Bump certifi from 2018.10.15 to 2022.12.7 in /docs by @dependabot in https://github.com/pypa/pipenv/pull/5526
    • Issue 5486 null markers by @matteius in https://github.com/pypa/pipenv/pull/5529
    • Remove CI from deprecation warning and only alert if env vars are set. by @matteius in https://github.com/pypa/pipenv/pull/5534
    • Fix typo in docs by @palewire in https://github.com/pypa/pipenv/pull/5535
    • vendor: bump plette to 0.4.4 by @oz123 in https://github.com/pypa/pipenv/pull/5539
    • [fix] update --outdated raises NonExistentKey with dev package by @shimpeko in https://github.com/pypa/pipenv/pull/5541
    • Refactor virtualenv create logic by @matteius in https://github.com/pypa/pipenv/pull/5533

    New Contributors

    • @efinkler-dm made their first contribution in https://github.com/pypa/pipenv/pull/5516
    • @piraartur made their first contribution in https://github.com/pypa/pipenv/pull/5524
    • @palewire made their first contribution in https://github.com/pypa/pipenv/pull/5535
    • @shimpeko made their first contribution in https://github.com/pypa/pipenv/pull/5541

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.30...v2022.12.17

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.30(Nov 30, 2022)

    What's Changed

    • Documentation updates. by @matteius in https://github.com/pypa/pipenv/pull/5498
    • requirements: fix generation of file by @oz123 in https://github.com/pypa/pipenv/pull/5504
    • Remove newer code branch that prevents new sources from being added to lockfile. by @matteius in https://github.com/pypa/pipenv/pull/5512
    • core: fix bug introduced with rich.console by @oz123 in https://github.com/pypa/pipenv/pull/5513

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.25...v2022.11.30

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.25.dev0(Nov 24, 2022)

  • v2022.11.25(Nov 24, 2022)

  • v2022.11.24(Nov 24, 2022)

    What's Changed

    • Include missing package data for Safety by @yeisonvargasf in https://github.com/pypa/pipenv/pull/5492
    • Fix ruamel inclusion in wheel. by @matteius in https://github.com/pypa/pipenv/pull/5495
    • Stop building universal wheels by @tucked in https://github.com/pypa/pipenv/pull/5497
    • Get packages for pipenv check from the target venv. by @yeisonvargasf in https://github.com/pypa/pipenv/pull/5501

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.23...v2022.11.24

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.23(Nov 23, 2022)

    What's Changed

    • fix PIPENV_MAX_DEPTH environment variable by @bjorand in https://github.com/pypa/pipenv/pull/5461
    • Remove yaspin spinner by @oz123 in https://github.com/pypa/pipenv/pull/5468
    • vendor: drop more unused code by @oz123 in https://github.com/pypa/pipenv/pull/5467
    • feat(shells): support nushell by @efugier in https://github.com/pypa/pipenv/pull/5470
    • Bump version requirementslib and more vendor clean up by @oz123 in https://github.com/pypa/pipenv/pull/5481
    • Fix syntax error in requirementslib vendor by @haplo in https://github.com/pypa/pipenv/pull/5483
    • Vendor new safety (#5217) by @matteius in https://github.com/pypa/pipenv/pull/5218
    • Remove QuasiPipTempDirectory and use pip's TempDirectory. by @matteius in https://github.com/pypa/pipenv/pull/5487

    New Contributors

    • @bjorand made their first contribution in https://github.com/pypa/pipenv/pull/5461
    • @efugier made their first contribution in https://github.com/pypa/pipenv/pull/5470
    • @haplo made their first contribution in https://github.com/pypa/pipenv/pull/5483

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.11...v2022.11.23

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.11(Nov 11, 2022)

    What's Changed

    • Add Python 3.11 to the testing by @cclauss in https://github.com/pypa/pipenv/pull/5245
    • Issue 5456 by @matteius in https://github.com/pypa/pipenv/pull/5464

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.5...v2022.11.11

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.5(Nov 5, 2022)

    What's Changed

    • Roll back change vendoring of colorama. by @matteius in https://github.com/pypa/pipenv/pull/5460

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.11.4...v2022.11.5

    Source code(tar.gz)
    Source code(zip)
  • v2022.11.4(Nov 4, 2022)

    What's Changed

    • Consolidate pipenv settings to use get_from_env by @micahjsmith in https://github.com/pypa/pipenv/pull/5451
    • Fixes issue with unexpected package index resolution after upgrading pip to 22.3 by @matteius in https://github.com/pypa/pipenv/pull/5448
    • More vendor clean up by @oz123 in https://github.com/pypa/pipenv/pull/5450

    New Contributors

    • @micahjsmith made their first contribution in https://github.com/pypa/pipenv/pull/5451

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.25...v2022.11.4

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.25(Oct 26, 2022)

    What's Changed

    • Replace deprecated workflow command by @AlexNDRmac in https://github.com/pypa/pipenv/pull/5405
    • Update Link For VCS Support by @kailashchoudhary11 in https://github.com/pypa/pipenv/pull/5412
    • Add missing backtick in the contributing documentation. by @questras in https://github.com/pypa/pipenv/pull/5410
    • Remove usage of mkdir_p in favour of os.makedirs by @oz123 in https://github.com/pypa/pipenv/pull/5402
    • Remove appdirs.py in favor of platformdirs by @oz123 in https://github.com/pypa/pipenv/pull/5420
    • Add support for multiple categories in exported requirements by @dojutsu-user in https://github.com/pypa/pipenv/pull/5431
    • added foresight workflow and test kit actions by @serkan-ozal in https://github.com/pypa/pipenv/pull/5433
    • Docs(Readme) : Added Table of Contents by @kailashchoudhary11 in https://github.com/pypa/pipenv/pull/5437
    • Docs improvements by @oz123 in https://github.com/pypa/pipenv/pull/5436
    • Rewrite Environment.sys_path without vistir.misc.run by @oz123 in https://github.com/pypa/pipenv/pull/5430
    • Remove usage of vistir.cmdparse by @oz123 in https://github.com/pypa/pipenv/pull/5419
    • Add Foresight status badge to README by @rwxdash in https://github.com/pypa/pipenv/pull/5438
    • chore: Update outdated LICENSE year by @bluzir in https://github.com/pypa/pipenv/pull/5434
    • Vendor in Pip 22.3 by @matteius in https://github.com/pypa/pipenv/pull/5414

    New Contributors

    • @AlexNDRmac made their first contribution in https://github.com/pypa/pipenv/pull/5405
    • @kailashchoudhary11 made their first contribution in https://github.com/pypa/pipenv/pull/5412
    • @questras made their first contribution in https://github.com/pypa/pipenv/pull/5410
    • @dojutsu-user made their first contribution in https://github.com/pypa/pipenv/pull/5431
    • @serkan-ozal made their first contribution in https://github.com/pypa/pipenv/pull/5433
    • @rwxdash made their first contribution in https://github.com/pypa/pipenv/pull/5438
    • @bluzir made their first contribution in https://github.com/pypa/pipenv/pull/5434

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.12...v2022.10.25

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.12(Oct 12, 2022)

    What's Changed

    • Bump plette to v0.4.2 by @oz123 in https://github.com/pypa/pipenv/pull/5401
    • Update documentation for callable scripts by @jerempy in https://github.com/pypa/pipenv/pull/5396
    • Remove recommended packages link in doc sidebar by @feuloren in https://github.com/pypa/pipenv/pull/5400

    New Contributors

    • @feuloren made their first contribution in https://github.com/pypa/pipenv/pull/5400

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.11...v2022.10.12

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.11(Oct 11, 2022)

    What's Changed

    • Revert back to build isolation by default; support extra-pip-args on sync command. by @matteius in https://github.com/pypa/pipenv/pull/5399

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.10...v2022.10.11

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.10(Oct 10, 2022)

    What's Changed

    • Scripts run package functions by @jerempy in https://github.com/pypa/pipenv/pull/5390
    • Fix for the meta data not getting updated in the lock phase. by @matteius in https://github.com/pypa/pipenv/pull/5393
    • Followup plette update: run vendoring script + news fragment by @matteius in https://github.com/pypa/pipenv/pull/5394

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.9...v2022.10.10

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.9(Oct 9, 2022)

    What's Changed

    • Update documentation around requirements command and provide current examples. by @matteius in https://github.com/pypa/pipenv/pull/5383
    • Add pytest.markers to pyproject.toml by @jerempy in https://github.com/pypa/pipenv/pull/5388
    • Python full version in pipfile by @jerempy in https://github.com/pypa/pipenv/pull/5387
    • Clean conftest by @oz123 in https://github.com/pypa/pipenv/pull/5389
    • Support Named Package Categories by @matteius in https://github.com/pypa/pipenv/pull/5366

    New Contributors

    • @jerempy made their first contribution in https://github.com/pypa/pipenv/pull/5388

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.10.4...v2022.10.9

    Source code(tar.gz)
    Source code(zip)
  • v2022.10.4(Oct 5, 2022)

    What's Changed

    • Use creator venv when creating virtual environments by @matteius in https://github.com/pypa/pipenv/pull/5376
    • Prefer to use the lockfile sources if available since this is used in install phase by @matteius in https://github.com/pypa/pipenv/pull/5380
    • Bump dparse version to 0.6.2 by @oz123 in https://github.com/pypa/pipenv/pull/5386
    • Vendor latest wheel by @matteius in https://github.com/pypa/pipenv/pull/5384
    • Add news fragment for dropping six by @oz123 in https://github.com/pypa/pipenv/pull/5381

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.24...v2022.10.4

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.24(Sep 24, 2022)

    What's Changed

    • Always evaluate markers fresh, without lru_cache. by @matteius in https://github.com/pypa/pipenv/pull/5373

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.21...v2022.9.24

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.21(Sep 21, 2022)

    What's Changed

    • GitHub Workflows security hardening by @sashashura in https://github.com/pypa/pipenv/pull/5365
    • cli: set click_types.Path for -r and -e options by @exploide in https://github.com/pypa/pipenv/pull/5352
    • Fix for --skip-lock by @matteius in https://github.com/pypa/pipenv/pull/5368

    New Contributors

    • @sashashura made their first contribution in https://github.com/pypa/pipenv/pull/5365
    • @exploide made their first contribution in https://github.com/pypa/pipenv/pull/5352

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.20...v2022.9.21

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.20(Sep 20, 2022)

    What's Changed

    • Remove iso8601 from vendored packages by @oz123 in https://github.com/pypa/pipenv/pull/5346
    • Remove --sequential by @oz123 in https://github.com/pypa/pipenv/pull/5348
    • Safer usages of pkg_resources by @matteius in https://github.com/pypa/pipenv/pull/5350
    • Replace usage of pipfile by @oz123 in https://github.com/pypa/pipenv/pull/5339
    • Migrate isort, mypy, and pytest config into pyproject.toml by @cclauss in https://github.com/pypa/pipenv/pull/5361

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.8...v2022.9.20

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.8(Sep 8, 2022)

    What's Changed

    • improve the case of upstream dependencies that mess up markers by @matteius in https://github.com/pypa/pipenv/pull/5329
    • Allow users to pass a string of extra arguments to pip by @matteius in https://github.com/pypa/pipenv/pull/5283
    • Deprecate the --three flag by @oz123 in https://github.com/pypa/pipenv/pull/5328
    • Fix typos by @tocic in https://github.com/pypa/pipenv/pull/5330
    • Convert test runner to use pypiserver package as standalone process by @matteius in https://github.com/pypa/pipenv/pull/5284
    • Fix extra indexes by @aronbierbaum in https://github.com/pypa/pipenv/pull/5220
    • Examine the 20 slowest tests and make improvements. by @matteius in https://github.com/pypa/pipenv/pull/5331
    • Load the dot env earlier by @matteius in https://github.com/pypa/pipenv/pull/5334
    • Bump vendored version of shellingham by @oz123 in https://github.com/pypa/pipenv/pull/5336
    • Bump plette version to v0.3.0 by @oz123 in https://github.com/pypa/pipenv/pull/5337
    • Actually load the dot env file before virtualenv creation. by @matteius in https://github.com/pypa/pipenv/pull/5338
    • Better editable detection by @matteius in https://github.com/pypa/pipenv/pull/5342
    • Bump pipdeptree by @oz123 in https://github.com/pypa/pipenv/pull/5343

    New Contributors

    • @tocic made their first contribution in https://github.com/pypa/pipenv/pull/5330
    • @aronbierbaum made their first contribution in https://github.com/pypa/pipenv/pull/5220

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.4...v2022.9.8

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.4(Sep 4, 2022)

    What's Changed

    • relock pipenv by @matteius in https://github.com/pypa/pipenv/pull/5325
    • fix for issue where requirement is a file or URL but does conntain hashes. by @matteius in https://github.com/pypa/pipenv/pull/5327

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.9.2...v2022.9.4

    Source code(tar.gz)
    Source code(zip)
  • v2022.9.2(Sep 2, 2022)

    What's Changed

    • Fix issue where a file install is included with the hashed requirements. by @matteius in https://github.com/pypa/pipenv/pull/5320
    • Documentation: Fix Docker example in Basic Usage by @UniversalSuperBox in https://github.com/pypa/pipenv/pull/5318
    • Use a context manager to handle the temporary constraints file by @swaldhoer in https://github.com/pypa/pipenv/pull/5316
    • Apply fix to constraints generation based on fact that pip resolver does not allow unnamed constraints. by @matteius in https://github.com/pypa/pipenv/pull/5321
    • Respect disable_pip_input setting from Pipfile by @Darsstar in https://github.com/pypa/pipenv/pull/5323

    New Contributors

    • @UniversalSuperBox made their first contribution in https://github.com/pypa/pipenv/pull/5318
    • @swaldhoer made their first contribution in https://github.com/pypa/pipenv/pull/5316
    • @Darsstar made their first contribution in https://github.com/pypa/pipenv/pull/5323

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.31...v2022.9.2

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.31(Sep 1, 2022)

    What's Changed

    • Remove dateutil. by @matteius in https://github.com/pypa/pipenv/pull/5312
    • Issue 4925 resolver envvar limit by @matteius in https://github.com/pypa/pipenv/pull/5313
    • Remove no longer used method which_pip by @matteius in https://github.com/pypa/pipenv/pull/5314
    • Reduce the amount of calls to pip and the number of tempfiles in batch_install. by @matteius in https://github.com/pypa/pipenv/pull/5301
    • Drop progress bar. by @matteius in https://github.com/pypa/pipenv/pull/5315
    • Allow environment variable references to be passed through to the Pipfile unredacted by @matteius in https://github.com/pypa/pipenv/pull/5298

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.30...v2022.8.31

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.30(Aug 30, 2022)

    What's Changed

    • Fix nondeterminism with environment markers #5239 by @bakhtiary in https://github.com/pypa/pipenv/pull/5286
    • Fixes pipenv lock nondeterminism with environment markers by @dqkqd in https://github.com/pypa/pipenv/pull/5299
    • Fix: try python3 before python in install --system (#5296) by @enku in https://github.com/pypa/pipenv/pull/5300
    • Update README formatting at "Usage". by @dshah244 in https://github.com/pypa/pipenv/pull/5281
    • Try to address these sporadic test failures without skipping the test. by @matteius in https://github.com/pypa/pipenv/pull/5305
    • Revert "Fix nondeterminism with environment markers #5239 (#5286)" by @matteius in https://github.com/pypa/pipenv/pull/5306
    • Vendor in requirementslib==2.0.1 and vistir==0.6.1 by @matteius in https://github.com/pypa/pipenv/pull/5308
    • Fixes checking constraint throws deprecation messages. by @dqkqd in https://github.com/pypa/pipenv/pull/5309

    New Contributors

    • @enku made their first contribution in https://github.com/pypa/pipenv/pull/5300
    • @dshah244 made their first contribution in https://github.com/pypa/pipenv/pull/5281

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.24...v2022.8.30

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.24(Aug 24, 2022)

    What's Changed

    • Fix typo in Basic Usage of Pipenv doc by @harunyasar in https://github.com/pypa/pipenv/pull/5276
    • Vendor in requirementslib==2.0.0 & drop pip-shims & revert sysconfig patch w/ safer setuptools usage by @matteius in https://github.com/pypa/pipenv/pull/5228
    • Vendor in pythonfinder==1.3.1 by @matteius in https://github.com/pypa/pipenv/pull/5292

    New Contributors

    • @harunyasar made their first contribution in https://github.com/pypa/pipenv/pull/5276

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.19...v2022.8.24

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.19(Aug 19, 2022)

    What's Changed

    • Exclude from resolver constraints the editable dependencies that will be installed. by @matteius in https://github.com/pypa/pipenv/pull/5271
    • Issue 5273 unable to install extras because constraints are not recognized by @dqkqd in https://github.com/pypa/pipenv/pull/5274
    • Revert the exclusion of BAD_PACKAGES from batch_install by @matteius in https://github.com/pypa/pipenv/pull/5275

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.17...v2022.8.19

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.17(Aug 17, 2022)

    What's Changed

    • Actually filter out missing interpreters by @jfly in https://github.com/pypa/pipenv/pull/5262
    • Revise how we do the import patch to include only module pipenv. by @matteius in https://github.com/pypa/pipenv/pull/5267

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.15...v2022.8.17

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.15(Aug 15, 2022)

    What's Changed

    • Remvoe reference to -r from documentation. by @matteius in https://github.com/pypa/pipenv/pull/5258
    • pip install was skipping packages that were installed elsewhere by @matteius in https://github.com/pypa/pipenv/pull/5255
    • Add install instructions for void linux by @jgarte in https://github.com/pypa/pipenv/pull/5257
    • Remove get_pipenv_dist function that is no longer used. by @matteius in https://github.com/pypa/pipenv/pull/5250

    New Contributors

    • @jgarte made their first contribution in https://github.com/pypa/pipenv/pull/5257

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.14...v2022.8.15

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.14(Aug 14, 2022)

    What's Changed

    • Upgrade GitHub Actions by @cclauss in https://github.com/pypa/pipenv/pull/5244
    • Don't count packaging as a bad package to omit. by @matteius in https://github.com/pypa/pipenv/pull/5248
    • Remove Cached Property from vendor by @oz123 in https://github.com/pypa/pipenv/pull/5249

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.13...v2022.8.14

    Source code(tar.gz)
    Source code(zip)
  • v2022.8.13(Aug 13, 2022)

    What's Changed

    • Remove old way of generting requirements. by @matteius in https://github.com/pypa/pipenv/pull/5200
    • update README by @oz123 in https://github.com/pypa/pipenv/pull/5223
    • Improve CI variable handling by @matteius in https://github.com/pypa/pipenv/pull/5222
    • fix bug when auto completing install and uninstall by @bakhtiary in https://github.com/pypa/pipenv/pull/5225
    • Convert this test off pip-shims, it became flakey recently. by @matteius in https://github.com/pypa/pipenv/pull/5226
    • Add missing vendoring files that get generated when running vendoring. by @matteius in https://github.com/pypa/pipenv/pull/5216
    • Revise other spots that did not use the internal pip vendoring by @matteius in https://github.com/pypa/pipenv/pull/5229
    • Fix for inclusion of setuptools in the lock and install phase + other BAD_PACKAGES. by @matteius in https://github.com/pypa/pipenv/pull/5231
    • Use pep517 from pip own _vendor by @oz123 in https://github.com/pypa/pipenv/pull/5227
    • Vendoring in pip 22.2.2 by @matteius in https://github.com/pypa/pipenv/pull/5230
    • Drop zipp from vendored libs. by @oz123 in https://github.com/pypa/pipenv/pull/5236
    • Document all environment variables by @oz123 in https://github.com/pypa/pipenv/pull/5235
    • Fix typo: the latest version of pipenv is 2022.8.5 by @jfly in https://github.com/pypa/pipenv/pull/5238
    • Remove code that is not required but may be causing the mac OS test failures. by @matteius in https://github.com/pypa/pipenv/pull/5241
    • Issue 4371 incorrect dependencies when install dev packages by @dqkqd in https://github.com/pypa/pipenv/pull/5234

    New Contributors

    • @bakhtiary made their first contribution in https://github.com/pypa/pipenv/pull/5225

    Full Changelog: https://github.com/pypa/pipenv/compare/v2022.8.5...v2022.8.13

    Source code(tar.gz)
    Source code(zip)
Owner
Python Packaging Authority
Python Packaging Authority
Cilantropy: a Python Package Manager interface created to provide an "easy-to-use" visual and also a command-line interface for Pythonistas.

Cilantropy Cilantropy is a Python Package Manager interface created to provide an "easy-to-use" visual and also a command-line interface for Pythonist

48 Dec 16, 2022
Python Development Workflow for Humans.

Pipenv: Python Development Workflow for Humans [ ~ Dependency Scanning by PyUp.io ~ ] Pipenv is a tool that aims to bring the best of all packaging wo

Python Packaging Authority 23.5k Jan 06, 2023
A PyPI mirror client according to PEP 381 http://www.python.org/dev/peps/pep-0381/

This is a PyPI mirror client according to PEP 381 + PEP 503 http://www.python.org/dev/peps/pep-0381/. bandersnatch =4.0 supports Linux, MacOSX + Wind

Python Packaging Authority 345 Dec 28, 2022
PokerFace is a Python package for various poker tools.

PokerFace is a Python package for various poker tools. The following features are present in PokerFace... Types for cards and their componen

Juho Kim 21 Dec 29, 2022
If you have stars in your Pipfile and you don't want them, this project is for you!

unstar-pipfile If you have stars in your Pipfile, this project is for you! unstar-pipfile is a tool to scan Pipfile.lock and replace any stars in Pipf

2 Jul 26, 2022
Install and Run Python Applications in Isolated Environments

pipx — Install and Run Python Applications in Isolated Environments Documentation: https://pipxproject.github.io/pipx/ Source Code: https://github.com

5.8k Dec 31, 2022
A software manager for easy development and distribution of Python code

Piper A software manager for easy development and distribution of Python code. The main features that Piper adds to Python are: Support for large-scal

13 Nov 22, 2022
OS-agnostic, system-level binary package manager and ecosystem

Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for

Conda 5.1k Jan 07, 2023
Solaris IPS: Image Packaging System

Solaris Image Packaging System Introduction The image packaging system (IPS) is a software delivery system with interaction with a network repository

Oracle 57 Dec 30, 2022
Python Environment & Package Manager

Python Environment Manager A Visual Studio Code extension that provides the ability to via and manage all of your Python environments & packages from

Don Jayamanne 72 Dec 29, 2022
Dotpkg - Package manager for your dotfiles

Dotpkg A package manager for your dotfiles. Usage First make sure to have Python

FW 4 Mar 18, 2022
Example for how to package a Python library based on Cython.

Cython sample module This project is an example of a module that can be built using Cython. It is an upgrade from a similar model developed by Arin Kh

Juan JosĂŠ GarcĂ­a Ripoll 4 Aug 28, 2022
pip-run - dynamic dependency loader for Python

pip-run provides on-demand temporary package installation for a single interpreter run. It replaces this series of commands (or their Windows equivale

Jason R. Coombs 79 Dec 14, 2022
Python PyPi staging server and packaging, testing, release tool

devpi: PyPI server and packaging/testing/release tool This repository contains three packages comprising the core devpi system on the server and clien

629 Jan 01, 2023
A PDM plugin that packs your packages into a zipapp

pdm-packer A PDM plugin that packs your packages into a zipapp Requirements pdm-packer requires Python =3.7 Installation If you have installed PDM wi

Frost Ming 23 Dec 29, 2022
Simple Library Management made with Python

Installation pip install mysql-connector-python NOTE: You must make a database (library) & and table (books, student) to hold all data. Languange and

SonLyte 10 Oct 21, 2021
OS-agnostic, system-level binary package manager and ecosystem

Conda is a cross-platform, language-agnostic binary package manager. It is the package manager used by Anaconda installations, but it may be used for

Conda 5.1k Dec 30, 2022
[DEPRECATED] YUM package manager

⛔ This project is deprecated. Please use DNF, the successor of YUM. YUM Yum is an automatic updater and installer for rpm-based systems. Included prog

111 Dec 20, 2022
Python dependency management and packaging made easy.

Poetry: Dependency Management for Python Poetry helps you declare, manage and install dependencies of Python projects, ensuring you have the right sta

Poetry 23.1k Jan 01, 2023
Conan - The open-source C/C++ package manager

Conan Decentralized, open-source (MIT), C/C++ package manager. Homepage: https://conan.io/ Github: https://github.com/conan-io/conan Docs: https://doc

Conan.io 6.5k Jan 05, 2023