pipenv: pipenv run does not support a --dev flag
Is your feature request related to a problem? Please describe.
pipenv shell
and pipenv run
creates a virtual environment automatically if one does not already exists. However, they do not install development dependencies by default. As such I have to run pipenv install --dev
before using these commands. An example where I need to use pipenv run
is in CI scripts as I do not have a tty.
Describe the solution you’d like
It would be ideal to be able to just run pipenv shell --dev
or pipenv run --dev <command>
in order to also install development dependencies.
Describe alternatives you’ve considered
My main wish would be that pipenv install
(or pipenv shell
or pipenv run <command>
) actually installs development dependences by default. And that pipenv install --production
would install all other dependencies. The reason for this is that most often to install into production you do that in CI scripts so it’s easy to always have a --production
flag there. However, in development many developers often forget to add the --dev
flag and then gets confused as to why some module import does not work when running scripts. I see this problem all the time for colleagues new to Pipenv. This is due that in development the pipenv installation is a manual step.
npm does it the other way around and it feels more natural to just have to issue npm install
where it also installs development packages.
Additional context
Add any other context or screenshots about the feature request here. It may be a good idea to mention that platform and Python version you are on.
$ pipenv --support
Pipenv version: '2018.10.13'
Pipenv location: '/project/python2.7.1/lib/python2.7/site-packages/pipenv'
Python location: '/project/python2.7.1/bin/python2.7'
Python installations found:
2.6.6
:/usr/bin/python
2.7.1
:/app/python/.sys/@sys/2.7.1/RHEL64/bin/python2.7
2.7.1
:/project/python2.7.1/bin/python2.7
2.7.1
:/app/python/.sys/@sys/2.7.1/RHEL64/bin/python
2.6.6
:/usr/bin/python2.6
2.7.1
:/project/python2.7.1/bin/python
PEP 508 Information:
{'implementation_name': 'cpython',
'implementation_version': '0',
'os_name': 'posix',
'platform_machine': 'x86_64',
'platform_python_implementation': 'CPython',
'platform_release': '2.6.32-642.6.2.el6.x86_64',
'platform_system': 'Linux',
'platform_version': '#1 SMP Mon Oct 24 10:22:33 EDT 2016',
'python_full_version': '2.7.1',
'python_version': '2.7',
'sys_platform': 'linux2'}
System environment variables:
PYTHONDONTWRITEBYTECODE
LAST_GIT_REPO
SHELL
PROJ_NR
MANPATH
LOG_DIR
VENDOR
PYTHONPATH
JAVA_TOOL_OPTIONS
HOSTNAME
ARC_ENV
MAIL
LS_COLORS
C_INCLUDE_PATH
SSH_ASKPASS
GROUP
LESSOPEN
MACHTYPE
CPLUS_INCLUDE_PATH
CVS_RSH
USER
LD_LIBRARY_PATH
EDITOR
tigPATH
RELEASE_MODULE
PIP_PYTHON_PATH
LS_OPTIONS
firefoxPATH
MODULEPATH
SSH_CONNECTION
KERNEL_CHECK
WRAPPERFORCEDOS
PIP_SHIMS_BASE_MODULE
LC_TIME
_LMFILES_
KERNEL_VERSION
REMOTEHOST
PKG_CONFIG_PATH
DEFGROUP
HOME
DISPLAY
LANG
LIBRARY_PATH
LMOD_SYSTEM_NAME
ARC_OS_DETECT
OSTYPE
CCHOME
SITE
HOST
LC_MESSAGES
SSH_TTY
LC_COLLATE
ARC_RELEASE
WINEDITOR
HOSTTYPE
PROJECT_MODULE
SSH_CLIENT
JENKINS_URL
LOGNAME
PATH
TERM
ARCRELEASE
COBBLER_SERVER
ARCPROJECT
CCASE_BLD_UMASK
SITE_DEF_CC
LOADEDMODULES
PWD
NPM_CONFIG_PREFIX
Pipenv–specific environment variables:
Debug–specific environment variables:
PATH
:/project/bin:/project/python2.7.1/bin:/project/npm-global-package/bin:/project/jre1.8.0_74/bin:/project/node-v8.9.1-linux-x64/global-packages/bin:/app/vbuild/RHEL6-x86_64/firefox/57.0.4:/app/python/2.7.1/RHEL64/bin:/app/vbuild/RHEL6-x86_64/git/2.12.2/bin:/app/vbuild/RHEL6-x86_64/git/2.12.2/libexec/git-core:/app/kdiff3/0.9.96/RHEL64:/opt/quest/bin:/home/yesbox/.afs/0/rbin:/home/yesbox/.afs/0/pbin:/home/yesbox/.afs/0/ibin:/usr/afsws/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin
SHELL
:/bin/tcsh
EDITOR
:emacs
LANG
:en_US.utf8
PWD
:/home/yesbox/repo
Contents of Pipfile
(‘/home/yesbox/repo/Pipfile’):
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
beautifulsoup4 = "==4.5.3"
numpy = "==1.13.0"
pexpect = "==4.3.0"
pymongo = "==2.8"
pyyaml = "==3.12"
selenium = "==3.8.0"
svgpathtools = "==1.3.1"
svgwrite = "==1.1.11"
requests = "==2.19.1"
[packages]
[requires]
python_version = "2.7"
Contents of Pipfile.lock
(‘/home/yesbox/repo/Pipfile.lock’):
{
"_meta": {
"hash": {
"sha256": "d591c5668468393c5cf404947d4808c1db7c35c78384f8d180693a72d8beebde"
},
"pipfile-spec": 6,
"requires": {
"python_version": "2.7"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {},
"develop": {
"beautifulsoup4": {
"hashes": [
"sha256:0a91347d5a4ab2196407ff4d3d758f2e712cae9bdfa3fd1eb0f83edea95e0d8d",
"sha256:50e031957fe5d72c7ff6c10575d07b83a6462d12d12af03666b0dd1d9aa81c43",
"sha256:b21ca09366fa596043578fd4188b052b46634d22059e68dd0077d9ee77e08a3e"
],
"index": "pypi",
"version": "==4.5.3"
},
"certifi": {
"hashes": [
"sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638",
"sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a"
],
"version": "==2018.8.24"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"idna": {
"hashes": [
"sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e",
"sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16"
],
"version": "==2.7"
},
"numpy": {
"hashes": [
"sha256:0c9c2da161951a041fc01ec1849555532122d6fd5b41144af81ae322e88bf0ef",
"sha256:27b12b7412c6a1a6bdfd2142aa4c31ca54f0981d36fba787e4a92d4ff22d23a7",
"sha256:2dc292415b18f08efe615c26b1567dd986006c47dd6b23c870db483db8e95015",
"sha256:2f1ba22250725b1c719591a07d2146509aae5c620c43ecb9669a45487f7b9c89",
"sha256:36d932daf153d41789a189e0c266877cd4f2b719a9f9b672e8c3586d01cf0643",
"sha256:3ccd4f3176a6ca26fdfe31f4648af47a5ce0f681adc8321fe91e621dd26b7aae",
"sha256:4e9756c9882836690c6cfad0ae3fae51050d78a5766d3e9ecc7a8385425fb92a",
"sha256:560ca5248c2a8fd96ac75a05811eca0ce08dfeea2ee128c87c9c7261af366288",
"sha256:5a9e42acf951c84d0fd349d677262d67b913fb399025e5885b7ade20b9a2ace9",
"sha256:70c30db61dbc10dd5bcb63e830aa8c2ce993eb6821054abce372f04cd36f9bb5",
"sha256:78ef0f0e2e1701a54555ecb7d2916375dcac462b6511d5cdb2de8a2f2296f501",
"sha256:a61fd38d1ec67a5e3f0121522b3dddef4ba1407d175135447397cb8baec17860",
"sha256:ad699f255fba63814f7d55f67c4bf315fb5496f5ba6e0799ed11b00e78bf464f",
"sha256:ce7b3c0644c9157874d1323906c497c92296ae956e5cef0e4107e1ff55939386",
"sha256:da0be0d25e845d65f540c92daa17b1bad06c3ed98a54840e6b980cb5d683647f",
"sha256:dc703270f1caabbe361052ef678d5a5f18f91dfe36b1c5572d0b60dba4835eb5",
"sha256:dcff367b725586830ff0e20b805c7654c876c2d4585c0834a6049502b9d6cf7e",
"sha256:e0eb78fd246a965c7c232df88485c887916ec72a3c589ccbaa3f22dc8471b154",
"sha256:e17a9ec296353b01596b5e669265418343b8d0f2dd82f541d0cf9a3fc7eaccc8",
"sha256:e5dd9d9808ffcc053ea2c2f54fcd75c460843439daba65a699d6a2c9b8adcf27",
"sha256:e8edf465be222e324608fd5dd58d60b050c7fd602c9b7710a11631ee7280f59f",
"sha256:ed9212e489ac7f76506969581f1abb53fc30ac45bb28254759b634f4f51f0217",
"sha256:ee2bb63226aa933cddda2470e56de858669bdbb612b5bd7b2489408516bb3f24"
],
"index": "pypi",
"version": "==1.13.0"
},
"pexpect": {
"hashes": [
"sha256:00ab0872f80f5db740499e7a1283a7c3b97bea542d72df84d83dea17d0afd2d9",
"sha256:2b50dd8caa5007b10b0afcf075095814780b104b4a5cf9d8fbdc8bbc754e5ca4"
],
"index": "pypi",
"version": "==4.3.0"
},
"ptyprocess": {
"hashes": [
"sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0",
"sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"
],
"version": "==0.6.0"
},
"pymongo": {
"hashes": [
"sha256:0543f65364fb54fb54b954136cf6b5e689ab12a7c1d15c59c52d3d0c5fa73935",
"sha256:1108c3f21541b03d1a8ff49daea5cdbf76da75ff9c09057d8cb0b16c17933ef1",
"sha256:28d06f38fb8b20df792c3436724041c330902f3bfdfaa71e6e5825a00f328179",
"sha256:2f3a720aaf3c7f376754bdd128007b792af6fc4c1ad215f18dcb8918ade7ef36",
"sha256:39e014abb53ed5ef302b69a07b1e6c6ef1d7395af15283001148949ce9676c2f",
"sha256:65e217533c332a85dfe58e0fc1f44521103f030f97e5429499e0c880f50b666d",
"sha256:66e946612d932f6b5800c6324fd9bcbadd16de379f4ec56e57538ceff8c683fd",
"sha256:751918b7dc3bbbc05c071073a50e85a4a265fe5ca2d6ed939d65c1403a0701b0",
"sha256:8bc017a05f95e6bcb281cc64386822af484f04e8e74a2eb2351c96615a97490f",
"sha256:91bd48766b99094f646ebf34b35055aa2660d6c1fee7b8d5102ee838213f9387",
"sha256:a99b554bbeb2f3c8b2df793f187f5c969a3871aa613abd93cc3280c353573dd1",
"sha256:c1aedbc6044d5e70ea7a8f81205ae89742e7f58d96fd4cb7ef17312e016f20aa",
"sha256:cf8d4cb28188705da876eb64adacf5c582769dd7c96425e8aaba3e0d6e2d9e77",
"sha256:e410bfbfc880d63c608c48a787db46284e68642197068855ef1dfc5ff2771b01",
"sha256:e7483795284e961e33f78637936b14dd99fdc4c004ffdcbdec9b0e5017a7e7bf",
"sha256:e87c320a1f723dde4ae13bb56b8d91c1af39d99b79ee7b2484bf38f6a447b2d2",
"sha256:e8a60148a665ff8287559e8fb3835cc144256ee708e3afd3bfa9f23766350af7",
"sha256:ea57ecaa11b912f2b0339de3b59b27971c7315623f28fb368fd2ccaa35f8c8c8",
"sha256:f06963ac44d5d8110cf7a3602c990f9196c06160b73a58bf54285667e71d9a22",
"sha256:fdcc535924c10515e588d841a2cfe51debd760a2c636168182cb56b63ba42a89"
],
"index": "pypi",
"version": "==2.8"
},
"pyparsing": {
"hashes": [
"sha256:bc6c7146b91af3f567cf6daeaec360bc07d45ffec4cf5353f4d7a208ce7ca30a",
"sha256:d29593d8ebe7b57d6967b62494f8c72b03ac0262b1eed63826c6f788b3606401"
],
"version": "==2.2.2"
},
"pyyaml": {
"hashes": [
"sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736",
"sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f",
"sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab",
"sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7",
"sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1",
"sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8",
"sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4",
"sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269"
],
"index": "pypi",
"version": "==3.12"
},
"requests": {
"hashes": [
"sha256:63b52e3c866428a224f97cab011de738c36aec0185aa91cfacd418b5d58911d1",
"sha256:ec22d826a36ed72a7358ff3fe56cbd4ba69dd7a6718ffd450ff0e9df7a47ce6a"
],
"index": "pypi",
"version": "==2.19.1"
},
"selenium": {
"hashes": [
"sha256:3af07d7a4b5d523540fa4f32902b9dec15e0379862406aef974729f42411053d",
"sha256:af448c15b3225056cd406b435cda10bfcee250460a4811e4fd8b21be9f61626c"
],
"index": "pypi",
"version": "==3.8.0"
},
"svgpathtools": {
"hashes": [
"sha256:212cf13b9d7e81b0fd15563464920dddb9f01bb55ddcf3d634f457180eb1ed13",
"sha256:a865b63d621488ad201be28fde03bbffca311f89ac0062190a992073525e5ddc"
],
"index": "pypi",
"version": "==1.3.1"
},
"svgwrite": {
"hashes": [
"sha256:451c7f16220d654be0cfdbd13cc6f23aca69e6fd3ca19254e80b5f6d9ca6af5a",
"sha256:679507bb71c4eefb0d6c15643dbb8489ed0e3088330f46df30d7dc2abd897a82"
],
"index": "pypi",
"version": "==1.1.11"
},
"urllib3": {
"hashes": [
"sha256:a68ac5e15e76e7e5dd2b8f94007233e01effe3e50e8daddf69acfd81cb686baf",
"sha256:b5725a0bd4ba422ab0e66e89e030c806576753ea3ee08554382c14e685d117b5"
],
"version": "==1.23"
}
}
}
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 6
- Comments: 22 (11 by maintainers)
@techalchemy Understandable it is a breaking change, that might be something to consider for a major release.
Is there an idea to add --dev to
pipenv run
andpipenv shell
? As those two are most likely supposed to be used in development? Those commands seemed aimed at development and not production, right?This is a delibrate design decision because npm’s default to install all dependencies results in (IMO) people installing dev dependencies everywhere. Pipenv does this the other way around to encourage users to have a workable production environment, with develop requirements more “truly optional”. ~It is also the general direction most project managers work, with npm (and yarn, for this matter) being the exception rather than the rule.~ (Not correct, see discussion below.) The decision is of course open for discuss, but you’ll need a better reason than “because that’s how node does it”.
Dev deps not installed by default is different from, what I can tell from previous discussions, most other dependency management tools. To me a major version and breaking change in this area would be warranted to align and get the pipenv CLI become recognizable for the vast majority of users of various programming languages.
@matteius, sorry I am not following. I thought this issue was about
--dev
rather than--pre
?@sdispater @uranusjr I agree and honestly I can find no package manager that has the default to do a production installation. @uranusjr Where did you get that it was a deliberate design decision? And that it is the general direction, as that simply does not seem to be true?
I would actually say that it seems
pipenv run
andpipenv shell
seems to be used when not running in production and as such should install dev dependencies by default as well. Consider for example https://pipenv.readthedocs.io/en/latest/advanced/#automatic-loading-of-env which is typically used in development and not in production. Also, Kenneth has previously said that in CI it is recommended to usepipenv run
. And in CI one usually use development dependencies such as pep8.The more I look at this, the more convinced I become that you are doing it the incorrect way compared to other package managers. For the reasons specified in my first post, installing dev dependencies is far more common than to launch into production. And also the semantics of other commands than
pipenv install
actually seems to indicate they are aimed at being used in development (shell, run).@uranusjr I think it’s good to be clear here that you are discussing the alternative solution I would like. The main solution does not involve doing a change in regards to the default flag. What do you think about the main proposal?
In regards to the alternative solution suggested. When you say “project managers” I am assuming you mean “package managers”? If so, I did not just say “that is how node does it” as my main point. My main point was put forth in the previous lines. I quote:
Which other package managers use the same way as it has been done for Pipenv? Bundler also seem to have defaults for development: https://bundler.io/v1.16/man/bundle-install.1.html#DEPLOYMENT-MODE
As such, that is at least 3 out of all I’ve checked from this list:
Pipenv is a tool that aims to bring the best of all packaging worlds (bundler, composer, npm, cargo, yarn, etc.) to the Python world
edit: composer also seem to have the default of installing dev: https://getcomposer.org/doc/03-cli.md#install-i