-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
New env command and sub commands #731
Conversation
Really cool! I like the API. Does the version info get persisted anywhere? I mean if I have a Python 3.7-only project, what happens when a new developer |
@sprt This is a per-system feature, so the information is only persisted on the system the commands have been executed on. This is so that anyone can manage it's python versions and virtualenvs separately. |
That was a long way, but here it is thanks |
This is what I've been waiting for from poetry! Dependency management is great but we've needed a virtualenvwrapper replacement since it's apparently not being updated to use Some doc ideas:
My big question: how can I use this right now? I'm not sure how to best install from the dev branch. |
What do you mean? If you mean the
Poetry creates the virtualenvs in its own cache directory, see: https://poetry.eustace.io/docs/configuration/#settingsvirtualenvspath-string However, if you want them to be stored elsewhere, you can use the config command: poetry config settings.virtualenvs.path ~/.virtualenvs
What do you mean?
You have two choices here: Also, note that this is not a virtualenvwrapper replacement. The created virtualenvs are mainly intended to be used by Poetry and are mostly an implementation detail. The goal of Poetry is to not make the end users, especially newcomers, worry about virtualenvs. As to how to use it right now, I would recommend waiting for the next alpha release of version |
Yes, primarily OK, I'll wait for the next alpha! |
It would also be nice to have something like By the way, since we're still a long way off from having Poetry supported by the VSCode's Python extension, I've been scouring through it's docs, and I've found a way to at least get venvs from Poetry to show up in the interpreter selection menu:
putting this in the user settings.json file (not the project one) results in this appearing in the interpreter selection menu: |
My venvs are in |
Ok, I got emacs to use poetry venv : $ poetry config settings.virtualenvs.path ${PYENV_ROOT}/versions
$ PYENV_VERSION=3.7.1 poetry install
$ poetry env info --path | basename > .python-version Also, PROMPT_COMMAND activate .python-version if it's a venv. |
This is nice welcomed addition! However please ensure that |
@sdispater, I think that @paranoidi's suggestion would improve the user experience dramatically. The default virtual environments created by the For instance, in the absence of an activated virtual environment and with the following
the |
Is it available? " |
I think this feature is part 1.0 release. |
I'm having some difficulties getting the virtualenv path regardless of shell state (important for me due to keeping my session configuration scripts simple as possible): It can't reliably give the
If anyone has the same problem and considers this a feature request or a bug, feel free to make an issue. This seems like an observation / bikeshed at this point since only I'm complaining |
Is it supposed to work now (1.1.4)? If it is, I get the following error: ❯ poetry env use python3.6.10
/bin/sh: python3.6.10: command not found
EnvCommandError
Command python3.6.10 -c "import sys; print('.'.join([str(s) for s in sys.version_info[:3]]))" errored with the following return code 127, and output:
at ~/.pyenv/versions/3.8.0/lib/python3.8/site-packages/poetry/utils/env.py:345 in activate
341│ shell=True,
342│ )
343│ )
344│ except CalledProcessError as e:
→ 345│ raise EnvCommandError(e)
346│
347│ python_version = Version.parse(python_version.strip())
348│ minor = "{}.{}".format(python_version.major, python_version.minor)
349│ patch = python_version.text I do have this version installed: ❯ pyenv versions
system
3.6.1
3.6.10 I tried to run using only ❯ poetry env use python3.6
pyenv: python3.6: command not found
The `python3.6' command exists in these Python versions:
3.6.1
3.6.10
3.6.10/envs/raquel-3.6.10
raquel-3.6.10
Note: See 'pyenv help global' for tips on allowing both
python2 and python3 to be found. If I set the local interpreter to a 3.6 version it seems to work but I guess that's not the expected behaviour: ❯ pyenv local 3.6.10
❯ poetry env use python3.6
Recreating virtualenv .venv
Using virtualenv: .venv But I still have only a single environnement visible by poetry: ❯ poetry env list
.venv (Activated) And trying to switch back to the previous (3.8.0) will also fail. I usually use |
This pull request has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs. |
Pull Request Check List
This PR introduces a new
env
command with related sub commands, to make it easier to explicitly associate a Python version with the current project. This addresses #621.Here are the changes:
New
env use
commandThe
env use
command tells Poetry which Python versionto use for the current project.
If the python executable is in the
PATH
, it's possible to use it:It's also possible in this case to only specify the minor Python version:
To disable the explicitly activated virtualenv, it's possible to use the
special
system
Python version to retrieve the default behavior:New
env info
commandThe
env info
command displays basic information about the currently activated virtualenv:will output something similar to this:
It's possible to only display the path of the virtualenv by passing the
--path
optionto
env info
:New
env list
commandThe
env list
command lists all the virtualenvs associated with the current virtualenv.will output something like the following:
New
env remove
commandThe
env remove
command deletes virtualenvs associated with the current project:Similarly to
env use
, it's possible to pass eitherpython3.7
,3.7
or the name ofthe virtualenv (as returned by
env list
):Virtualenvs names now depend on the path of the project
This makes having different projects with the same name possible.