I think it might be worth considering to always load the .env
file. As far I can see it is only loaded when running pipenv shell
.
An example use case for this would be to share the configuration of PIPENV_VENV_IN_PROJECT
so that the venv is created in the local directory. See also steps to replicate.
$ python -V
: Python 2.7.11$ pipenv --version
: pipenv, version 8.2.7Run in powershell:
PS C:\tmp\pipenv> echo "PIPENV_VENV_IN_PROJECT 1" > .env
PS C:\tmp\pipenv> cat .env
PIPENV_VENV_IN_PROJECT 1
PS C:\tmp\pipenv> pipenv --two
.env
file is loaded, resulting in:
Virtualenv location: C:\tmp\pipenv\.venv
.env
file is not loaded, resulting in:
Virtualenv location: C:\Users\Karim\.virtualenvs\playground-pipenv-RDyG8wOS
To my understanding a .env file is specified to take KEY=VALUE
specifiers that are newline separated. Is there something unique to Windows that is allowing you to exclude the =
in your specification? Does your result change when you add the =
?
or this may possible be a duplicate of #879.
Does your result change when you add the =?
When adding the =
in between I get the following error when running pipenv shell
where the .env
file is actually loaded: TypeError: must be string without null bytes, not str
or this may possible be a duplicate of #879.
I guess not as there is no sign of the .env
file being loaded at all when running pipenv --two
.
Commands like pipenv shell
show a message that the .env
file is loaded:
Loading .env environment variables…
@kriim So is this more of a problem or an enhancement in your opinion? There are other tools out there like direnv
that can execute .env files upon entering a directory.
I think that making pipenv
handle .env
during pipenv install
is a better solution than direnv
because:
pipenv
already loads .env
, so all necessary plumbing is already theredirenv
has to be installed and configured separately, wherever you want to use pipenv
- all developers' machines, Jenkins, TravisCI etc.My personal motivation for having this functionality: I have a project that uses private PyPI that doesn't have a shared URL - each developer has their own URL because of security concerns, so I can't put that URL in Pipfile
. As far as I can see, the next logical place would be to put it in .env
, but it's not that useful when it's not used by pipenv install
.
@erinxocon It feels counterproductive to use a second tool to handle env vars when pipenv already has all the info it needs, and is already doing it partially. I feel the .env file (out of version control) would be a good place to store for instance the tokens for private repositories.
I have the the same problem as others, need to install a package from a private repository. Having pipenv install
using .env
would be very very useful.
Most helpful comment
I think that making
pipenv
handle.env
duringpipenv install
is a better solution thandirenv
because:pipenv
already loads.env
, so all necessary plumbing is already theredirenv
has to be installed and configured separately, wherever you want to usepipenv
- all developers' machines, Jenkins, TravisCI etc.My personal motivation for having this functionality: I have a project that uses private PyPI that doesn't have a shared URL - each developer has their own URL because of security concerns, so I can't put that URL in
Pipfile
. As far as I can see, the next logical place would be to put it in.env
, but it's not that useful when it's not used bypipenv install
.