From 36efe7e21978c225d79e2d8058663e9b380fe410 Mon Sep 17 00:00:00 2001 From: Dmitry Pribysh Date: Wed, 10 Feb 2016 20:48:58 +0300 Subject: [PATCH 1/3] Make pipreqs not write duplicated lines to requirements.txt --- pipreqs/pipreqs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 5e4bae2..02b735b 100755 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -182,7 +182,8 @@ def get_pkg_names(pkgs): if item[0] == pkg: toappend = item[1] break - result.append(toappend) + if toappend not in result: + result.append(toappend) return result From c3761598ce99854b4d5c8adeeb895969aadf8a31 Mon Sep 17 00:00:00 2001 From: Dmitry Pribysh Date: Wed, 10 Feb 2016 20:49:13 +0300 Subject: [PATCH 2/3] Add test for duplicated dependencies --- tests/_data_duplicated_deps/db.py | 6 ++++++ tests/test_pipreqs.py | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 tests/_data_duplicated_deps/db.py diff --git a/tests/_data_duplicated_deps/db.py b/tests/_data_duplicated_deps/db.py new file mode 100644 index 0000000..5e2a360 --- /dev/null +++ b/tests/_data_duplicated_deps/db.py @@ -0,0 +1,6 @@ +import pymongo +from bson.objectid import ObjectId + +# 'bson' package is mapped to 'pymongo'. +# But running pipreqs should not result in two duplicated +# lines 'pymongo==x.x.x'. diff --git a/tests/test_pipreqs.py b/tests/test_pipreqs.py index 99fe8fc..b8992d4 100755 --- a/tests/test_pipreqs.py +++ b/tests/test_pipreqs.py @@ -26,6 +26,7 @@ class TestPipreqs(unittest.TestCase): self.project = os.path.join(os.path.dirname(__file__), "_data") self.project_invalid = os.path.join(os.path.dirname(__file__), "_invalid_data") self.project_with_ignore_directory = os.path.join(os.path.dirname(__file__), "_data_ignore") + self.project_with_duplicated_deps = os.path.join(os.path.dirname(__file__), "_data_duplicated_deps") self.requirements_path = os.path.join(self.project, "requirements.txt") self.alt_requirement_path = os.path.join( self.project, "requirements2.txt") @@ -43,6 +44,12 @@ class TestPipreqs(unittest.TestCase): self.assertFalse("django" in imports) self.assertFalse("models" in imports) + def test_deduplicate_dependencies(self): + imports = pipreqs.get_all_imports(self.project_with_duplicated_deps) + pkgs = pipreqs.get_pkg_names(imports) + self.assertEqual(len(pkgs), 1) + self.assertIn("pymongo", pkgs) + def test_invalid_python(self): """ Test that invalid python files cannot be imported. From def91ce48a98e945d773718ba148bfb4de092b5b Mon Sep 17 00:00:00 2001 From: Dmitry Pribysh Date: Wed, 10 Feb 2016 20:59:24 +0300 Subject: [PATCH 3/3] Fix 'duplicated deps' test case for python 2.6 --- tests/test_pipreqs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_pipreqs.py b/tests/test_pipreqs.py index b8992d4..b0a6001 100755 --- a/tests/test_pipreqs.py +++ b/tests/test_pipreqs.py @@ -48,7 +48,7 @@ class TestPipreqs(unittest.TestCase): imports = pipreqs.get_all_imports(self.project_with_duplicated_deps) pkgs = pipreqs.get_pkg_names(imports) self.assertEqual(len(pkgs), 1) - self.assertIn("pymongo", pkgs) + self.assertTrue("pymongo" in pkgs) def test_invalid_python(self): """