From 2a26eadc9121f3ac115345b2349c3b5b4d306c0c Mon Sep 17 00:00:00 2001 From: Marocco2 Date: Sun, 10 Apr 2022 09:49:12 +0000 Subject: [PATCH 01/18] Mapping Telegram to python-telegram-bot telegram is a hollow pypi package, so pipreqs will try to install that instead of python-telegram-bot, which have a module named telegram. I'll ask to approve this change, as I'm blocked with my Pipedream workflow. --- pipreqs/mapping | 1 + 1 file changed, 1 insertion(+) diff --git a/pipreqs/mapping b/pipreqs/mapping index c1729eb..e5cd4b2 100644 --- a/pipreqs/mapping +++ b/pipreqs/mapping @@ -1061,6 +1061,7 @@ tasksitter:cerebrod tastypie:django_tastypie teamcity:teamcity_messages telebot:pyTelegramBotAPI +telegram:python-telegram-bot tempita:Tempita tenjin:Tenjin termstyle:python_termstyle From 0aa3f80b84b3e96198f2b6a3b490d6c9d0c31f1a Mon Sep 17 00:00:00 2001 From: Maximiliano Greco Date: Thu, 17 Nov 2022 13:25:49 +0100 Subject: [PATCH 02/18] enh: include airflow mapping closes https://github.com/bndr/pipreqs/issues/179 --- pipreqs/mapping | 1 + 1 file changed, 1 insertion(+) diff --git a/pipreqs/mapping b/pipreqs/mapping index c1729eb..fbcf868 100644 --- a/pipreqs/mapping +++ b/pipreqs/mapping @@ -129,6 +129,7 @@ aios3:aio_s3 airbrake:airbrake_flask airship:airship_icloud airship:airship_steamcloud +airflow:apache-airflow akamai:edgegrid_python alation:alation_api alba_client:alba_client_python From 80503cd3fda49c1bf4fb18a24972a454b68e9666 Mon Sep 17 00:00:00 2001 From: Ewout ter Hoeven Date: Fri, 2 Dec 2022 17:36:42 +0100 Subject: [PATCH 03/18] Require Python 3.7 or higher --- .github/workflows/tests.yml | 2 +- CONTRIBUTING.rst | 2 +- setup.py | 4 +++- tox.ini | 3 +-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 288065e..837fcfb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,7 +6,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9, pypy-3.7] + python-version: [3.7, 3.8, 3.9, pypy-3.7] steps: - name: Checkout repository diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index e6ae58a..60e73a2 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -99,7 +99,7 @@ Before you submit a pull request, check that it meets these guidelines: 2. If the pull request adds functionality, the docs should be updated. Put your new functionality into a function with a docstring, and add the feature to the list in README.rst. -3. The pull request should work for Python 2.7, 3.4, 3.5, 3.6, and PyPy. Check +3. The pull request should work for Python 3.7 to 3.11, and PyPy. Check https://travis-ci.org/bndr/pipreqs/pull_requests and make sure that the tests pass for all supported Python versions. diff --git a/setup.py b/setup.py index f119905..8b826ed 100755 --- a/setup.py +++ b/setup.py @@ -43,10 +43,11 @@ setup( 'License :: OSI Approved :: Apache Software License', 'Natural Language :: English', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', ], test_suite='tests', entry_points={ @@ -54,4 +55,5 @@ setup( 'pipreqs=pipreqs.pipreqs:main', ], }, + python_requires='>=3.7', ) diff --git a/tox.ini b/tox.ini index cf5c2c2..aea10ec 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,8 @@ [tox] -envlist = py36, py37, py38, py39, pypy3, flake8 +envlist = py37, py38, py39, pypy3, flake8 [gh-actions] python = - 3.6: py36 3.7: py37 3.8: py38 3.9: py39 From 775681975a52968cc629e93566e8a9e51b587f63 Mon Sep 17 00:00:00 2001 From: Alexander Wilms Date: Mon, 2 Jan 2023 22:42:27 +0100 Subject: [PATCH 04/18] Add mapping for python-constraint --- pipreqs/mapping | 1 + 1 file changed, 1 insertion(+) diff --git a/pipreqs/mapping b/pipreqs/mapping index c1729eb..6cf02eb 100644 --- a/pipreqs/mapping +++ b/pipreqs/mapping @@ -10,6 +10,7 @@ BeautifulSoupTests:BeautifulSoup BioSQL:biopython BuildbotStatusShields:BuildbotEightStatusShields ComputedAttribute:ExtensionClass +constraint:python-constraint Crypto:pycryptodome Cryptodome:pycryptodomex FSM:pexpect From f97d8b9ba4b5b1b0814f7e270d4ce6b705602b99 Mon Sep 17 00:00:00 2001 From: clvnkhr Date: Thu, 5 Jan 2023 15:06:39 +0800 Subject: [PATCH 05/18] resolve issue #285 simply moved the check in init for requirements.txt ahead of searching for packages. Closes #285. Passes tox (3.7, 3.8, 3.9, pypy3, flake8) --- pipreqs/pipreqs.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 24eeeb7..0ceb402 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -412,6 +412,16 @@ def init(args): if extra_ignore_dirs: extra_ignore_dirs = extra_ignore_dirs.split(',') + path = (args["--savepath"] if args["--savepath"] else + os.path.join(input_path, "requirements.txt")) + if (not args["--print"] + and not args["--savepath"] + and not args["--force"] + and os.path.exists(path)): + logging.warning("requirements.txt already exists, " + "use --force to overwrite it") + return + candidates = get_all_imports(input_path, encoding=encoding, extra_ignore_dirs=extra_ignore_dirs, @@ -442,9 +452,6 @@ def init(args): # sort imports based on lowercase name of package, similar to `pip freeze`. imports = sorted(imports, key=lambda x: x['name'].lower()) - path = (args["--savepath"] if args["--savepath"] else - os.path.join(input_path, "requirements.txt")) - if args["--diff"]: diff(args["--diff"], imports) return @@ -453,14 +460,6 @@ def init(args): clean(args["--clean"], imports) return - if (not args["--print"] - and not args["--savepath"] - and not args["--force"] - and os.path.exists(path)): - logging.warning("requirements.txt already exists, " - "use --force to overwrite it") - return - if args["--mode"]: scheme = args.get("--mode") if scheme in ["compat", "gt", "no-pin"]: From 5cdc966b2ee6836ad94b6884ef57e0e826959669 Mon Sep 17 00:00:00 2001 From: hansvana Date: Fri, 13 Jan 2023 11:15:15 +0100 Subject: [PATCH 06/18] Update mapping socketio to python-socketio Originally mapped to gevent-socketio, which is outdated and hasn't been updated since 2016. Anyone importing socketio is much more likely to mean python-socketio now. --- pipreqs/mapping | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipreqs/mapping b/pipreqs/mapping index c1729eb..0255266 100644 --- a/pipreqs/mapping +++ b/pipreqs/mapping @@ -1032,7 +1032,7 @@ slack:slackclient slugify:unicode_slugify smarkets:smk_python_sdk snappy:ctypes_snappy -socketio:gevent_socketio +socketio:python-socketio socketserver:pies2overrides sockjs:sockjs_tornado socks:SocksiPy_branch From 175524ec245746d1ac842523bd7a95902b1a2468 Mon Sep 17 00:00:00 2001 From: bskiefer Date: Mon, 6 Feb 2023 10:51:09 -0600 Subject: [PATCH 07/18] Update mapping for python-slugify --- pipreqs/mapping | 1 + 1 file changed, 1 insertion(+) diff --git a/pipreqs/mapping b/pipreqs/mapping index c1729eb..83e12e3 100644 --- a/pipreqs/mapping +++ b/pipreqs/mapping @@ -1030,6 +1030,7 @@ skbio:scikit_bio sklearn:scikit_learn slack:slackclient slugify:unicode_slugify +slugify:python-slugify smarkets:smk_python_sdk snappy:ctypes_snappy socketio:gevent_socketio From 3f5964fcb90ec6eb6df46d78e651a1b73538d0ba Mon Sep 17 00:00:00 2001 From: adeadfed Date: Tue, 14 Mar 2023 21:14:19 +0100 Subject: [PATCH 08/18] fix name resolution for local packages --- pipreqs/pipreqs.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 0ceb402..4195a75 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -229,7 +229,8 @@ def get_import_local(imports, encoding=None): result = [] for item in imports: if item.lower() in local: - result.append(local[item.lower()]) + # append to result a matching package, as well as its exported modules + result.append(dict(**local[item.lower()], exports=item.lower())) # removing duplicates of package/version result_unique = [ @@ -443,9 +444,12 @@ def init(args): else: logging.debug("Getting packages information from Local/PyPI") local = get_import_local(candidates, encoding=encoding) + # Get packages that were not found locally - difference = [x for x in candidates - if x.lower() not in [z['name'].lower() for z in local]] + difference = [x for x in candidates + # check if candidate name is found in the list of exported modules, installed locally + if x.lower() not in [y['exports'] for y in local]] + imports = local + get_imports_info(difference, proxy=proxy, pypi_server=pypi_server) From 6cd9925a31adc75522f4c453169eba162654af70 Mon Sep 17 00:00:00 2001 From: adeadfed Date: Wed, 29 Mar 2023 00:17:49 +0200 Subject: [PATCH 09/18] improved version of local package resolving --- pipreqs/pipreqs.py | 77 ++++++++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 27 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 4195a75..67a3110 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -195,7 +195,7 @@ def get_imports_info( def get_locally_installed_packages(encoding=None): - packages = {} + packages = [] ignore = ["tests", "_tests", "egg", "EGG", "info"] for path in sys.path: for root, dirs, files in os.walk(path): @@ -205,22 +205,31 @@ def get_locally_installed_packages(encoding=None): with open(item, "r", encoding=encoding) as f: package = root.split(os.sep)[-1].split("-") try: - package_import = f.read().strip().split("\n") + top_level_modules = f.read().strip().split("\n") except: # NOQA # TODO: What errors do we intend to suppress here? continue - for i_item in package_import: - if ((i_item not in ignore) and - (package[0] not in ignore)): - version = None - if len(package) > 1: - version = package[1].replace( - ".dist", "").replace(".egg", "") + + # filter off explicitly ignored top-level modules, such as test, egg, etc. + filtered_top_level_modules = list() - packages[i_item] = { - 'version': version, - 'name': package[0] - } + for module in top_level_modules: + if ((module not in ignore) and + (package[0] not in ignore)): + # append valid exported top level modules to the final list + filtered_top_level_modules.append(module) + + version = None + if len(package) > 1: + version = package[1].replace( + ".dist", "").replace(".egg", "") + + # append package: top_level_modules pairs instead of top_level_module: package pairs + packages.append({ + 'name': package[0], + 'version': version, + 'exports': filtered_top_level_modules + }) return packages @@ -228,17 +237,24 @@ def get_import_local(imports, encoding=None): local = get_locally_installed_packages() result = [] for item in imports: - if item.lower() in local: - # append to result a matching package, as well as its exported modules - result.append(dict(**local[item.lower()], exports=item.lower())) + # search through local packages + for package in local: + # if candidate import name matches export name inside the package exports + # or candidate import name equals to the package name + # append it to the result + if item in package['exports'] or item == package['name']: + result.append(package) + + # sanity check: + # imo we should no longer need the functionality to remove the duplicates + # TODO: recheck this + # it is possible that the pipreqs will write two packages, using same exported name again (!) + # we should log about this in case this happens # removing duplicates of package/version - result_unique = [ - dict(t) - for t in set([ - tuple(d.items()) for d in result - ]) - ] + # had to use second method instead of the first, listed here, because we have a list in the 'exports' field + # https://stackoverflow.com/questions/9427163/remove-duplicate-dict-in-list-in-python + result_unique = [i for n, i in enumerate(result) if i not in result[n + 1:]] return result_unique @@ -445,11 +461,18 @@ def init(args): logging.debug("Getting packages information from Local/PyPI") local = get_import_local(candidates, encoding=encoding) - # Get packages that were not found locally - difference = [x for x in candidates - # check if candidate name is found in the list of exported modules, installed locally - if x.lower() not in [y['exports'] for y in local]] - + # check if candidate name is found in the list of exported modules, installed locally + # and the package name is not in the list of local module names + # it add to difference + difference = [x for x in candidates + if + # aggregate all export lists into one + # flatten the list + x.lower() not in [y for x in local for y in x['exports']] + and + x.lower() not in [x['name'] for x in local] + ] + imports = local + get_imports_info(difference, proxy=proxy, pypi_server=pypi_server) From da442e7a2a3664c6001144a68bfcb63d72d7d6b3 Mon Sep 17 00:00:00 2001 From: adeadfed Date: Wed, 29 Mar 2023 00:25:45 +0200 Subject: [PATCH 10/18] add warnings to for remote resolving mode --- .vscode/launch.json | 18 ++++++++++++++++++ pipreqs/pipreqs.py | 11 +++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..4dcfe00 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python: Current File", + "type": "python", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "cwd": "${workspaceFolder}\\pipreqs", + "justMyCode": true, + "args": ["C:/Users/Strawberry/Desktop/projects/pipreqs-vulnerable", "--print"] + } + ] +} \ No newline at end of file diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 67a3110..63e76a9 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -176,6 +176,7 @@ def get_imports_info( for item in imports: try: + logging.warning('Import "%s" not found locally. Trying to resolve it at the PyPI server.', item) response = requests.get( "{0}{1}/json".format(pypi_server, item), proxies=proxy) if response.status_code == 200: @@ -187,9 +188,15 @@ def get_imports_info( raise HTTPError(status_code=response.status_code, reason=response.reason) except HTTPError: - logging.debug( - 'Package %s does not exist or network problems', item) + logging.warning( + 'Package "%s" does not exist or network problems', item) continue + logging.warning('Import "%s" was resolved to "%s:%s" package (%s).\nPlease, verify manually the final list of requirements.txt to avoid possible dependency confusions.', + item, + data.name, + data.latest_release_id, + data.pypi_url + ) result.append({'name': item, 'version': data.latest_release_id}) return result From 50498d3cd4b6ffbe30e93894e44e60b73b63d2f0 Mon Sep 17 00:00:00 2001 From: adeadfed Date: Wed, 29 Mar 2023 00:27:13 +0200 Subject: [PATCH 11/18] change warning messages --- pipreqs/pipreqs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 63e76a9..4690dcf 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -176,7 +176,7 @@ def get_imports_info( for item in imports: try: - logging.warning('Import "%s" not found locally. Trying to resolve it at the PyPI server.', item) + logging.warning('Import named "%s" not found locally. Trying to resolve it at the PyPI server.', item) response = requests.get( "{0}{1}/json".format(pypi_server, item), proxies=proxy) if response.status_code == 200: @@ -191,7 +191,7 @@ def get_imports_info( logging.warning( 'Package "%s" does not exist or network problems', item) continue - logging.warning('Import "%s" was resolved to "%s:%s" package (%s).\nPlease, verify manually the final list of requirements.txt to avoid possible dependency confusions.', + logging.warning('Import named "%s" was resolved to "%s:%s" package (%s).\nPlease, verify manually the final list of requirements.txt to avoid possible dependency confusions.', item, data.name, data.latest_release_id, From 001ead91edea0837e9291176fce068f3e4f1211d Mon Sep 17 00:00:00 2001 From: adeadfed Date: Wed, 29 Mar 2023 00:28:17 +0200 Subject: [PATCH 12/18] delete vscode related files from repo --- .gitignore | 3 +++ .vscode/launch.json | 18 ------------------ 2 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 .vscode/launch.json diff --git a/.gitignore b/.gitignore index 45a067a..922004b 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ Session.vim *~ /pipreqs/*.bak + +# vscode gitignore +.vscode/* \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 4dcfe00..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Python: Current File", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal", - "cwd": "${workspaceFolder}\\pipreqs", - "justMyCode": true, - "args": ["C:/Users/Strawberry/Desktop/projects/pipreqs-vulnerable", "--print"] - } - ] -} \ No newline at end of file From 3ae82087f96ef1526ba1e0b93e0e7b7d72ddd669 Mon Sep 17 00:00:00 2001 From: adeadfed Date: Wed, 29 Mar 2023 00:32:00 +0200 Subject: [PATCH 13/18] remove invalid comment --- pipreqs/pipreqs.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 4690dcf..dc31e57 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -252,12 +252,6 @@ def get_import_local(imports, encoding=None): if item in package['exports'] or item == package['name']: result.append(package) - # sanity check: - # imo we should no longer need the functionality to remove the duplicates - # TODO: recheck this - # it is possible that the pipreqs will write two packages, using same exported name again (!) - # we should log about this in case this happens - # removing duplicates of package/version # had to use second method instead of the first, listed here, because we have a list in the 'exports' field # https://stackoverflow.com/questions/9427163/remove-duplicate-dict-in-list-in-python From bb61883079ebbe45714d3cb5cd035b951bc10885 Mon Sep 17 00:00:00 2001 From: adeadfed Date: Sat, 8 Apr 2023 17:10:02 +0200 Subject: [PATCH 14/18] revert changes to .gitignore --- .gitignore | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitignore b/.gitignore index 922004b..45a067a 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,3 @@ Session.vim *~ /pipreqs/*.bak - -# vscode gitignore -.vscode/* \ No newline at end of file From 5537bcd217eff939c2e1835a1cac928ce429056f Mon Sep 17 00:00:00 2001 From: adeadfed Date: Thu, 13 Apr 2023 15:59:50 +0200 Subject: [PATCH 15/18] fix pep8 linting issues --- pipreqs/pipreqs.py | 69 +++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index dc31e57..75a6d0b 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -176,7 +176,11 @@ def get_imports_info( for item in imports: try: - logging.warning('Import named "%s" not found locally. Trying to resolve it at the PyPI server.', item) + logging.warning( + 'Import named "%s" not found locally.' + 'Trying to resolve it at the PyPI server.', + item + ) response = requests.get( "{0}{1}/json".format(pypi_server, item), proxies=proxy) if response.status_code == 200: @@ -191,11 +195,14 @@ def get_imports_info( logging.warning( 'Package "%s" does not exist or network problems', item) continue - logging.warning('Import named "%s" was resolved to "%s:%s" package (%s).\nPlease, verify manually the final list of requirements.txt to avoid possible dependency confusions.', - item, - data.name, - data.latest_release_id, - data.pypi_url + logging.warning( + 'Import named "%s" was resolved to "%s:%s" package (%s).' + 'Please, verify manually the final list of requirements.txt' + 'to avoid possible dependency confusions.', + item, + data.name, + data.latest_release_id, + data.pypi_url ) result.append({'name': item, 'version': data.latest_release_id}) return result @@ -216,22 +223,26 @@ def get_locally_installed_packages(encoding=None): except: # NOQA # TODO: What errors do we intend to suppress here? continue - - # filter off explicitly ignored top-level modules, such as test, egg, etc. + + # filter off explicitly ignored top-level modules + # such as test, egg, etc. filtered_top_level_modules = list() for module in top_level_modules: - if ((module not in ignore) and - (package[0] not in ignore)): - # append valid exported top level modules to the final list - filtered_top_level_modules.append(module) - + if ( + (module not in ignore) and + (package[0] not in ignore) + ): + # append exported top level modules to the list + filtered_top_level_modules.append(module) + version = None if len(package) > 1: version = package[1].replace( ".dist", "").replace(".egg", "") - # append package: top_level_modules pairs instead of top_level_module: package pairs + # append package: top_level_modules pairs + # instead of top_level_module: package pairs packages.append({ 'name': package[0], 'version': version, @@ -246,16 +257,17 @@ def get_import_local(imports, encoding=None): for item in imports: # search through local packages for package in local: - # if candidate import name matches export name inside the package exports + # if candidate import name matches export name # or candidate import name equals to the package name # append it to the result if item in package['exports'] or item == package['name']: result.append(package) # removing duplicates of package/version - # had to use second method instead of the first, listed here, because we have a list in the 'exports' field + # had to use second method instead of the previous one, + # because we have a list in the 'exports' field # https://stackoverflow.com/questions/9427163/remove-duplicate-dict-in-list-in-python - result_unique = [i for n, i in enumerate(result) if i not in result[n + 1:]] + result_unique = [i for n, i in enumerate(result) if i not in result[n+1:]] return result_unique @@ -461,19 +473,20 @@ def init(args): else: logging.debug("Getting packages information from Local/PyPI") local = get_import_local(candidates, encoding=encoding) - - # check if candidate name is found in the list of exported modules, installed locally + + # check if candidate name is found in + # the list of exported modules, installed locally # and the package name is not in the list of local module names # it add to difference - difference = [x for x in candidates - if - # aggregate all export lists into one - # flatten the list - x.lower() not in [y for x in local for y in x['exports']] - and - x.lower() not in [x['name'] for x in local] - ] - + difference = [x for x in candidates if + # aggregate all export lists into one + # flatten the list + # check if candidate is in exports + x.lower() not in [y for x in local for y in x['exports']] + and + # check if candidate is package names + x.lower() not in [x['name'] for x in local]] + imports = local + get_imports_info(difference, proxy=proxy, pypi_server=pypi_server) From 2103371746b727f6db341d301214d16c0dfba59b Mon Sep 17 00:00:00 2001 From: adeadfed Date: Thu, 13 Apr 2023 16:05:50 +0200 Subject: [PATCH 16/18] add whitespaces to pep8 formatted strings --- pipreqs/pipreqs.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pipreqs/pipreqs.py b/pipreqs/pipreqs.py index 75a6d0b..8182115 100644 --- a/pipreqs/pipreqs.py +++ b/pipreqs/pipreqs.py @@ -177,7 +177,7 @@ def get_imports_info( for item in imports: try: logging.warning( - 'Import named "%s" not found locally.' + 'Import named "%s" not found locally. ' 'Trying to resolve it at the PyPI server.', item ) @@ -196,8 +196,8 @@ def get_imports_info( 'Package "%s" does not exist or network problems', item) continue logging.warning( - 'Import named "%s" was resolved to "%s:%s" package (%s).' - 'Please, verify manually the final list of requirements.txt' + 'Import named "%s" was resolved to "%s:%s" package (%s).\n' + 'Please, verify manually the final list of requirements.txt ' 'to avoid possible dependency confusions.', item, data.name, From a1f83d27d9a42aa95b481e2fa94716702266110c Mon Sep 17 00:00:00 2001 From: Vadim Kravcenko Date: Fri, 14 Apr 2023 09:08:49 +0200 Subject: [PATCH 17/18] Bump Version to 0.4.13 --- pipreqs/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pipreqs/__init__.py b/pipreqs/__init__.py index 0491276..d163f29 100755 --- a/pipreqs/__init__.py +++ b/pipreqs/__init__.py @@ -1,3 +1,3 @@ __author__ = 'Vadim Kravcenko' __email__ = 'vadim.kravcenko@gmail.com' -__version__ = '0.4.11' +__version__ = '0.4.13' From 68f9b2859d45a60e699839f87b1b9558cd36a329 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 8 Oct 2023 03:19:17 +0000 Subject: [PATCH 18/18] Bump wheel from 0.23.0 to 0.38.1 Bumps [wheel](https://github.com/pypa/wheel) from 0.23.0 to 0.38.1. - [Release notes](https://github.com/pypa/wheel/releases) - [Changelog](https://github.com/pypa/wheel/blob/main/docs/news.rst) - [Commits](https://github.com/pypa/wheel/compare/0.23.0...0.38.1) --- updated-dependencies: - dependency-name: wheel dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 959d1b7..f4c9e26 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -wheel==0.23.0 +wheel==0.38.1 Yarg==0.1.9 docopt==0.6.2 \ No newline at end of file