diff --git a/README.rst b/README.rst index b6cbd30..139fa7d 100644 --- a/README.rst +++ b/README.rst @@ -49,6 +49,7 @@ Usage --force Overwrite existing requirements.txt --diff Compare modules in requirements.txt to project imports. --clean Clean up requirements.txt by removing modules that are not imported in project. + --no-pin Omit version of output packages. Example ------- diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 4e7b39f..b921d6e 100755 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -31,6 +31,7 @@ Options: imports. --clean Clean up requirements.txt by removing modules that are not imported in project. + --no-pin Omit version of output packages. """ from __future__ import print_function, absolute_import from contextlib import contextmanager @@ -447,6 +448,9 @@ def init(args): "use --force to overwrite it") return + if args.get('--no-pin'): + imports = [{'name': item["name"], 'version': ''} for item in imports] + if args["--print"]: output_requirements(imports) logging.info("Successfully output requirements") diff --git a/tests/test_pipreqs.py b/tests/test_pipreqs.py index a020fab..dcd75c5 100755 --- a/tests/test_pipreqs.py +++ b/tests/test_pipreqs.py @@ -181,6 +181,24 @@ class TestPipreqs(unittest.TestCase): for item in ['click', 'getpass']: self.assertFalse(item.lower() in data) + def test_omit_version(self): + """ + Test --no-pin parameter + """ + pipreqs.init( + {'': self.project_with_ignore_directory, '--savepath': None, '--print': False, + '--use-local': None, '--force': True, + '--proxy': None, + '--pypi-server': None, + '--diff': None, + '--clean': None, + '--no-pin': True + } + ) + with open(os.path.join(self.project_with_ignore_directory, "requirements.txt"), "r") as f: + data = f.read().lower() + for item in ['beautifulsoup4==4.8.1', 'boto==2.49.0']: + self.assertFalse(item.lower() in data) def tearDown(self): """