-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Support PEP 610 editables in pip freeze and pip list #10249
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
Merged
Merged
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
5d4ed8c
Refactor egg_link_path/dist_is_editable
sbidoul 0fe8182
Add PEP 610 editables support to BaseDistribution
sbidoul cee422f
Refactor direct_url test helper
sbidoul d251b4b
Add editable project location to pip list output
sbidoul 0199c50
Use editable project location in pip freeze
sbidoul d051a00
Remove unused get_installed_distributions
sbidoul 56a912a
Add news fragment
sbidoul 5a38ee7
Add docs example for pip list and editable installs
sbidoul 729eb5d
Improve docs
sbidoul 1149926
Minor pip list refactoring
sbidoul 5fa413d
Extract egg_link* function to a separate module
sbidoul 2de1e5b
Remove egg_link_path()
sbidoul aa06366
Remove dead code
sbidoul ca05176
Refactor direct url editable test
sbidoul File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
Support `PEP 610 <https://www.python.org/dev/peps/pep-0610/>`_ to detect | ||
editable installs in ``pip freeze`` and ``pip list``. The ``pip list`` column output | ||
has a new ``Editable project location`` column, and the JSON output has a new | ||
``editable_project_location`` field. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
# The following comment should be removed at some point in the future. | ||
# mypy: strict-optional=False | ||
|
||
import os | ||
import re | ||
import sys | ||
from typing import Optional | ||
|
||
from pip._internal.locations import site_packages, user_site | ||
from pip._internal.utils.virtualenv import ( | ||
running_under_virtualenv, | ||
virtualenv_no_global, | ||
) | ||
|
||
__all__ = [ | ||
"egg_link_path_from_sys_path", | ||
"egg_link_path_from_location", | ||
] | ||
|
||
|
||
def _egg_link_name(raw_name: str) -> str: | ||
""" | ||
Convert a Name metadata value to a .egg-link name, by applying | ||
the same substitution as pkg_resources's safe_name function. | ||
Note: we cannot use canonicalize_name because it has a different logic. | ||
""" | ||
return re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link" | ||
|
||
|
||
def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: | ||
""" | ||
Look for a .egg-link file for project name, by walking sys.path. | ||
""" | ||
egg_link_name = _egg_link_name(raw_name) | ||
for path_item in sys.path: | ||
egg_link = os.path.join(path_item, egg_link_name) | ||
if os.path.isfile(egg_link): | ||
return egg_link | ||
return None | ||
|
||
|
||
def egg_link_path_from_location(raw_name: str) -> Optional[str]: | ||
""" | ||
Return the path for the .egg-link file if it exists, otherwise, None. | ||
|
||
There's 3 scenarios: | ||
1) not in a virtualenv | ||
try to find in site.USER_SITE, then site_packages | ||
2) in a no-global virtualenv | ||
try to find in site_packages | ||
3) in a yes-global virtualenv | ||
try to find in site_packages, then site.USER_SITE | ||
(don't look in global location) | ||
|
||
For #1 and #3, there could be odd cases, where there's an egg-link in 2 | ||
locations. | ||
|
||
This method will just return the first one found. | ||
""" | ||
sites = [] | ||
if running_under_virtualenv(): | ||
sites.append(site_packages) | ||
if not virtualenv_no_global() and user_site: | ||
sites.append(user_site) | ||
else: | ||
if user_site: | ||
sites.append(user_site) | ||
sites.append(site_packages) | ||
|
||
egg_link_name = _egg_link_name(raw_name) | ||
for site in sites: | ||
egglink = os.path.join(site, egg_link_name) | ||
if os.path.isfile(egglink): | ||
return egglink | ||
return None |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.