diff --git a/news/7731.bugfix b/news/7731.bugfix new file mode 100644 index 00000000000..a73391027fe --- /dev/null +++ b/news/7731.bugfix @@ -0,0 +1 @@ +Avoid using the current directory for check, freeze, install, list and show commands, when invoked as 'python -m pip ' diff --git a/src/pip/__main__.py b/src/pip/__main__.py index e83b9e056b3..7c2505fa5bd 100644 --- a/src/pip/__main__.py +++ b/src/pip/__main__.py @@ -3,6 +3,13 @@ import os import sys +# Remove '' and current working directory from the first entry +# of sys.path, if present to avoid using current directory +# in pip commands check, freeze, install, list and show, +# when invoked as python -m pip +if sys.path[0] in ('', os.getcwd()): + sys.path.pop(0) + # If we are running from a wheel, add the wheel to sys.path # This allows the usage python pip-*.whl/pip install pip-*.whl if __package__ == '': diff --git a/tests/functional/test_list.py b/tests/functional/test_list.py index 53f4152c2b7..115675118a1 100644 --- a/tests/functional/test_list.py +++ b/tests/functional/test_list.py @@ -3,6 +3,7 @@ import pytest +from tests.lib import create_test_package_with_setup from tests.lib.path import Path @@ -543,3 +544,44 @@ def test_list_path_multiple(tmpdir, script, data): json_result = json.loads(result.stdout) assert {'name': 'simple', 'version': '2.0'} in json_result assert {'name': 'simple2', 'version': '3.0'} in json_result + + +def test_list_skip_work_dir_pkg(script): + """ + Test that list should not include package in working directory + """ + + # Create a test package and create .egg-info dir + pkg_path = create_test_package_with_setup(script, + name='simple', + version='1.0') + script.run('python', 'setup.py', 'egg_info', + expect_stderr=True, cwd=pkg_path) + + # List should not include package simple when run from package directory + result = script.pip('list', '--format=json', cwd=pkg_path) + json_result = json.loads(result.stdout) + assert {'name': 'simple', 'version': '1.0'} not in json_result + + +def test_list_include_work_dir_pkg(script): + """ + Test that list should include package in working directory + if working directory is added in sys.path + """ + + # Create a test package and create .egg-info dir + pkg_path = create_test_package_with_setup(script, + name='simple', + version='1.0') + + script.run('python', 'setup.py', 'egg_info', + expect_stderr=True, cwd=pkg_path) + + # Add PYTHONPATH env variable + script.environ.update({'PYTHONPATH': pkg_path}) + + # List should include package simple when run from package directory + result = script.pip('list', '--format=json', cwd=pkg_path) + json_result = json.loads(result.stdout) + assert {'name': 'simple', 'version': '1.0'} in json_result