pipenv: installing packages from git broken

Fresh install:

$ pipenv --version
pipenv, version 3.3.6

Simple Pipfile:

$ cat Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[packages]
crayons = { git="https://github.com/kennethreitz/crayons.git", ref="v0.1.2" }

Creates what seems to me a valid lock file:

$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "39b2447b7dd6976804de490321577a2db0f4fc4327e0795a93436ea69afad9a8"
        },
        "requires": {},
        "sources": [
            {
                "verify_ssl": true,
                "url": "https://pypi.python.org/simple"
            }
        ]
    },
    "default": {
        "crayons from git+https://github.com/kennethreitz/crayons.git@v0.1.2#egg=crayons": {
            "hash": "sha256:a292b7ef29131345fd329ff5a94d1e2e59569be4dbd9fa8b99ff7114d72102a6",
            "version": "==0.1.2"
        },
        "colorama": {
            "hash": "sha256:a4c0f5bc358a62849653471e309dcc991223cf86abafbec17cd8f41327279e89",
            "version": "==0.3.7"
        }
    },
    "develop": {}
}

And now installing breaks:

$ pipenv install
No package provided, installing all dependencies.
Pipfile found at /[...]/Pipfile. Considering this to be the project home.
Installing dependencies from Pipfile.lock...
An error occured while installing!
Invalid requirement: 'crayons from git+https://github.com/kennethreitz/crayons.git@v0.1.2#egg=crayons==0.1.2'
It looks like a path. Does it exist ?


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

These are the versions in my env:

$ pip freeze
appdirs==1.4.0
blindspin==2.0.0
click==6.7
click-completion==0.2.1
colorama==0.3.7
crayons==0.1.2
delegator.py==0.0.8
Jinja2==2.9.5
MarkupSafe==0.23
packaging==16.8
parse==1.6.6
pew==0.1.26
pexpect==4.2.1
pipenv==3.3.6
pipfile==0.0.1
ptyprocess==0.5.1
pyparsing==2.1.10
pythonz-bd==1.11.4
requests==2.13.0
requirements-parser==0.1.0
resumable-urlretrieve==0.1.4
six==1.10.0
toml==0.9.2
virtualenv==15.1.0
virtualenv-clone==0.2.6

Leaving out the ref attribute makes no difference.

Providing the editable flag leaves the package out of the lock file altogether:

$ cat Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[packages]
crayons = { git="https://github.com/kennethreitz/crayons.git", ref="v0.1.2", editable=1 }

produces:

$ cat Pipfile.lock
{
    "_meta": {
        "sources": [
            {
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ],
        "requires": {},
        "hash": {
            "sha256": "fa6b6a1618451ef360028928588f70f6b3964f4dc8b0d371fb71a355b334abee"
        }
    },
    "develop": {},
    "default": {}
}

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Reactions: 1
  • Comments: 21 (12 by maintainers)

Commits related to this issue

Most upvoted comments

Thanks for opening this @evertlammerts, we realized last week that this was regressed in the 3.3.X releases of pipenv. I’m currently working on getting this functionality reintegrated, so bear with me while we get this tidied.

Since we hadn’t gotten around to making a formal issue for this, we’ll use this one to track this going forward.

This should be resolved with #242 and released in 3.5.0.

But pipenv install git+… still fails.

Installing from git should still work fine in the form pipenv install git+https://github.com/django/dango.git#egg=Django. I believe this is noted farther up in the issue.

The problem we’re discussing here is installing those dependencies again from the Pipfile/Pipfile.lock. There’s a pretty detailed explanation of the current state of things two comments above your original.

The only reason that crayons works in this case is it’s a dependency of pipenv itself and MUST be installed and you have chosen the same version number that pip will install by default. If you try another package that isn’t hosted on PyPI such as the example below, you’ll find your table syntax doesn’t work.

[packages.coinbase]
git = "https://github.com/coinbase/coinbase-python"
version = "2.0.2"