From feac59544639d36aa31b5fbd5d3b436f67a056ad Mon Sep 17 00:00:00 2001 From: Devesh Kumar Singh Date: Thu, 2 Apr 2020 02:01:51 +0530 Subject: [PATCH] Don't use cwd in python -m pip command --- news/7731.bugfix | 1 + src/pip/__main__.py | 7 ++++++ tests/functional/test_list.py | 42 +++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 news/7731.bugfix diff --git a/news/7731.bugfix b/news/7731.bugfix new file mode 100644 index 000000000..a73391027 --- /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 e83b9e056..7c2505fa5 100644 --- a/src/pip/__main__.py +++ b/src/pip/__main__.py @@ -3,6 +3,13 @@ from __future__ import absolute_import 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 53f4152c2..115675118 100644 --- a/tests/functional/test_list.py +++ b/tests/functional/test_list.py @@ -3,6 +3,7 @@ import os 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