Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allowing multiple python versions #2683

Closed
nim65s opened this issue Jul 31, 2018 · 5 comments
Closed

Allowing multiple python versions #2683

nim65s opened this issue Jul 31, 2018 · 5 comments
Labels
Type: Duplicate This issue is a duplicate of an already-existing issue.

Comments

@nim65s
Copy link

nim65s commented Jul 31, 2018

Hi,

I'd like to allow multiple python versions on a project.

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

In the current case, my production environments are in 3.7 (docker image python:slim-stretch) while python 3.7 is not yet available in my dev environments (archlinux).
But I'm pretty sure that my project will work equally on 3.6 and 3.7, and would like to avoid installing and using another interpreter.
Also, I am using features like f-strings which are not available in 3.5, so I can't specify python_version ="3", because on other dev environments like xenial, one must install an interpreter >=3.6.

Describe the solution you'd like

Allowing a version string in Pipfile, like:

[requires]
python_version = ">=3.6"
Describe alternatives you've considered

We could also allow a list, like python_version = "3.6,3.7".


$ pipenv --support

Pipenv version: '2018.7.1'

Pipenv location: '/usr/local/lib/python3.7/site-packages/pipenv'

Python location: '/usr/local/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

  • 3.7: /usr/local/bin/python3.7m

  • 3.7: /usr/local/bin/python3.7

  • 3.7: /usr/local/bin/python3.7

  • 3.7.0: /usr/local/bin/python

  • 3.7.0: /usr/local/bin/python

  • 2.7.13: /usr/bin/python

  • 2.7.13: /usr/bin/python2

  • 3.7.0: /usr/local/bin/python3

  • 3.7.0: /usr/local/bin/python3

  • 3.5.3: /usr/bin/python3

PEP 508 Information:

{'implementation_name': 'cpython',
 'implementation_version': '3.7.0',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '4.4.0-116-generic',
 'platform_system': 'Linux',
 'platform_version': '#140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018',
 'python_full_version': '3.7.0',
 'python_version': '3.7',
 'sys_platform': 'linux'}

System environment variables:

  • EMAIL_USE_SSL
  • LANG
  • HOSTNAME
  • EMAIL_USE_TLS
  • GPG_KEY
  • EMAIL_USER
  • SECRET_KEY
  • PWD
  • HOME
  • DOMAIN_NAME
  • MEMCACHED
  • TERM
  • EMAIL_FQDN
  • ALLOWED_HOST
  • PYTHON_VERSION
  • POSTGRES_PASSWORD
  • EMAIL_HOST
  • SHLVL
  • DB
  • ADMIN_MAIL
  • PATH
  • PYTHON_PIP_VERSION
  • EMAIL_HOST_PASSWORD
  • _
  • PYTHONDONTWRITEBYTECODE
  • PIP_PYTHON_PATH

Pipenv–specific environment variables:

Debug–specific environment variables:

  • PATH: /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • LANG: C.UTF-8
  • PWD: /app

Contents of Pipfile ('/app/Pipfile'):

[[source]]
url = "https://pypi.org/simple"
name = "pypi"
verify_ssl = true

[dev-packages]

[packages]
ndh = ">=3.6"
django = "<2.1"
django-filter = "*"
"django-tables2" = "*"
requests = "*"
GitPython = "*"
djangorestframework = "*"

[requires]
python_version = ">=3.6"

[pipenv]
allow_prereleases = true

Contents of Pipfile.lock ('/app/Pipfile.lock'):

{
    "_meta": {
        "hash": {
            "sha256": "8aa12687e2b98dae1d44072f51160fa0bb424048237baa197110c9de93173d07"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": ">=3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "certifi": {
            "hashes": [
                "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7",
                "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0"
            ],
            "version": "==2018.4.16"
        },
        "chardet": {
            "hashes": [
                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
            ],
            "version": "==3.0.4"
        },
        "django": {
            "hashes": [
                "sha256:97886b8a13bbc33bfeba2ff133035d3eca014e2309dff2b6da0bdfc0b8656613",
                "sha256:e900b73beee8977c7b887d90c6c57d68af10066b9dac898e1eaf0f82313de334"
            ],
            "index": "pypi",
            "version": "==2.0.7"
        },
        "django-autoslug-iplweb": {
            "hashes": [
                "sha256:6ddec119072067e78cbdb53f7ba11ae8bee5a2f2f0fe1d90c6a4d3c0a91489d3",
                "sha256:8a3ba49b18f082e29ac9cb17884d4b2149ad14988bd89e118b1c5ddf94fdea8e"
            ],
            "version": "==1.9.4"
        },
        "django-bootstrap4": {
            "hashes": [
                "sha256:6db4a27b33851833e68b96344f9df063150dcace8d4787ebfc21eceb55196945"
            ],
            "version": "==0.0.6"
        },
        "django-filter": {
            "hashes": [
                "sha256:6f4e4bc1a11151178520567b50320e5c32f8edb552139d93ea3e30613b886f56",
                "sha256:86c3925020c27d072cdae7b828aaa5d165c2032a629abbe3c3a1be1edae61c58"
            ],
            "index": "pypi",
            "version": "==2.0.0"
        },
        "django-tables2": {
            "hashes": [
                "sha256:43b9af69933dd70afd26b5179987fa89a64221379d605a7be86686c4e30933b5"
            ],
            "index": "pypi",
            "version": "==2.0.0a5"
        },
        "djangorestframework": {
            "hashes": [
                "sha256:b6714c3e4b0f8d524f193c91ecf5f5450092c2145439ac2769711f7eba89a9d9",
                "sha256:c375e4f95a3a64fccac412e36fb42ba36881e52313ec021ef410b40f67cddca4"
            ],
            "index": "pypi",
            "version": "==3.8.2"
        },
        "gitdb2": {
            "hashes": [
                "sha256:87783b7f4a8f6b71c7fe81d32179b3c8781c1a7d6fa0c69bff2f315b00aff4f8",
                "sha256:bb4c85b8a58531c51373c89f92163b92f30f81369605a67cd52d1fc21246c044"
            ],
            "version": "==2.0.4"
        },
        "gitpython": {
            "hashes": [
                "sha256:563221e5a44369c6b79172f455584c9ebbb122a13368cc82cb4b5addff788f82",
                "sha256:8237dc5bfd6f1366abeee5624111b9d6879393d84745a507de0fda86043b65a8"
            ],
            "index": "pypi",
            "version": "==2.1.11"
        },
        "idna": {
            "hashes": [
                "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
                "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
            ],
            "version": "==2.7"
        },
        "ndh": {
            "hashes": [
                "sha256:4e10cb37591e3b32f45e3c6c5b39403463928390354b41e0c2d516f245a8cfb3",
                "sha256:bac98ec967b175d3730e7e7a74e388b1d90c744ff2c955cf5f0ce57b6947b822"
            ],
            "index": "pypi",
            "version": "==3.6.0"
        },
        "pytz": {
            "hashes": [
                "sha256:a061aa0a9e06881eb8b3b2b43f05b9439d6583c206d0a6c340ff72a7b6669053",
                "sha256:ffb9ef1de172603304d9d2819af6f5ece76f2e85ec10692a524dd876e72bf277"
            ],
            "version": "==2018.5"
        },
        "requests": {
            "hashes": [
                "sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1",
                "sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"
            ],
            "index": "pypi",
            "version": "==2.19.1"
        },
        "smmap2": {
            "hashes": [
                "sha256:0dd53d991af487f9b22774fa89451358da3607c02b9b886a54736c6a313ece0b",
                "sha256:dc216005e529d57007ace27048eb336dcecb7fc413cfb3b2f402bb25972b69c6"
            ],
            "version": "==2.0.4"
        },
        "urllib3": {
            "hashes": [
                "sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
                "sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
            ],
            "version": "==1.23"
        }
    },
    "develop": {}
}
@uranusjr
Copy link
Member

Hi, this has been proposed multiple times (the most informational thread is #1050, I believe), and the resolution is to refrain from doing it, since Pipenv wants to focus on the application aspect of Python development. In an application context, and it is wildly considered best practice to support only one Python minor version in a Python application.

Note that the python_version key is optional. You can always remove it if it causes problems, and document the version requirements otherwise (i.e. in the README). The checks also should generate only warnings that can be ignored if you really know what you’re doing.

@uranusjr uranusjr added the Type: Duplicate This issue is a duplicate of an already-existing issue. label Jul 31, 2018
@nim65s
Copy link
Author

nim65s commented Aug 1, 2018

Thanks for your answer

@phihag
Copy link

phihag commented Jun 24, 2019

The checks also should generate only warnings that can be ignored if you really know what you’re doing.

@uranusjr Are you sure that this is really only a warning, and not an error? I'm seeing pipenv exit with a non-zero exit code (1 in my case) and only printing this message. Should I file a bug?

@xbklairith
Copy link

Use poetry instead

$ poetry env use python3.4
$ poetry env use python3.7

poetry env

@radiantone
Copy link

This would be very useful considering python is making breaking changes that are not backward compatible. Specifying multiple versions allows projects to be installed by users without the extra headache. It's a win for all parties.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Duplicate This issue is a duplicate of an already-existing issue.
Projects
None yet
Development

No branches or pull requests

5 participants