Skip to main content

Determine what 3rd-party packages a project imports.

Project description

packagelister

Determine what packages and versions a project imports.

Install with:

pip install packagelister

Usage


Can be used either programmatically or with the included cli.

Programmatic:

>>> from pathlib import Path
>>> import json
>>> from packagelister import packagelister
>>>
>>> project = packagelister.scan_dir(Path.cwd())
Scanning C:/python/packagelister...
[______________________________________________]-100.00%
>>>
>>> print(*project.packages, sep="\n")
Package(name='argparse', distribution_name=None, version=None, builtin=True)
Package(name='ast', distribution_name=None, version=None, builtin=True)
Package(name='dataclasses', distribution_name=None, version=None, builtin=True)
Package(name='importlib', distribution_name=None, version=None, builtin=True)
Package(name='pathier', distribution_name='pathier', version='1.3.4', builtin=False)
Package(name='printbuddies', distribution_name='printbuddies', version='1.4.1', builtin=False)
Package(name='pytest', distribution_name='pytest', version='7.2.1', builtin=False)
Package(name='sys', distribution_name=None, version=None, builtin=True)
Package(name='typing_extensions', distribution_name='typing_extensions', version='4.7.1', builtin=False)
>>>
>>> print(project.get_formatted_requirements(">="))
['pathier>=1.3.4', 'printbuddies>=1.4.1', 'pytest>=7.2.1', 'typing_extensions>=4.7.1']
>>>
>>> print(json.dumps(project.get_files_by_package(), indent=2))
{
  "argparse": [
    "C:/python/packagelister/src/packagelister/packagelister_cli.py",
    "C:/python/packagelister/src/packagelister/whouses.py"
  ],
  "ast": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "dataclasses": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "importlib": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "pathier": [
    "C:/python/packagelister/src/packagelister/packagelister.py",
    "C:/python/packagelister/src/packagelister/packagelister_cli.py",
    "C:/python/packagelister/src/packagelister/whouses.py",
    "C:/python/packagelister/tests/test_packagelister.py"
  ],
  "printbuddies": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "pytest": [
    "C:/python/packagelister/tests/test_packagelister.py"
  ],
  "sys": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "typing_extensions": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ]
}
>>>
>>> print(json.dumps({k:v for k,v in project.get_files_by_package().items() if k in project.packages.third_party.names}, indent=2))
{
  "pathier": [
    "C:/python/packagelister/src/packagelister/packagelister.py",
    "C:/python/packagelister/src/packagelister/packagelister_cli.py",
    "C:/python/packagelister/src/packagelister/whouses.py",
    "C:/python/packagelister/tests/test_packagelister.py"
  ],
  "printbuddies": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ],
  "pytest": [
    "C:/python/packagelister/tests/test_packagelister.py"
  ],
  "typing_extensions": [
    "C:/python/packagelister/src/packagelister/packagelister.py"
  ]
}

CLI:

There are two cli tools included in this package: packagelister and whouses.

packagelister:

For the current directory, can be used to print the packages used by the current directory, generate a requirements.txt file, and view which files import a package.

C:/python/packagelister>packagelister -h
usage: packagelister [-h] [-f] [-g] [-v {==,<,<=,>,>=,~=}] [-b] [-d]

Scan the current directory for imported packages.

options:
  -h, --help            show this help message and exit
  -f, --files           Show which files imported each of the packages.
  -g, --generate_requirements
                        Generate a requirements.txt file in the current directory.
  -v {==,<,<=,>,>=,~=}, --versions {==,<,<=,>,>=,~=}
                        When generating a requirements.txt file, include the versions of the packages using this relation. (You may need to put quotes around some of the options.)
  -b, --builtins        Include built in standard library modules in terminal display.
  -d, --debug           Print the Package objects found during the scan.

C:/python/packagelister>packagelister
Scanning C:/python/packagelister...
[______________________________________________]-100.00%
Packages imported by packagelister:
pathier v1.3.4
printbuddies v1.4.1
pytest v7.2.1
typing_extensions v4.7.1

C:/python/packagelister>packagelister -b
Scanning C:/python/packagelister...
[______________________________________________]-100.00%
Packages imported by packagelister:
pathier v1.3.4
printbuddies v1.4.1
pytest v7.2.1
typing_extensions v4.7.1
argparse
ast
dataclasses
importlib
sys

C:/python/packagelister>packagelister -f
Scanning C:/python/packagelister...
[______________________________________________]-100.00%
Packages imported by packagelister:
pathier v1.3.4
printbuddies v1.4.1
pytest v7.2.1
typing_extensions v4.7.1
Files importing each package:
pathier:
  C:/python/packagelister/src/packagelister/packagelister.py
  C:/python/packagelister/src/packagelister/packagelister_cli.py
  C:/python/packagelister/src/packagelister/whouses.py
  C:/python/packagelister/tests/test_packagelister.py
printbuddies:
  C:/python/packagelister/src/packagelister/packagelister.py
pytest:
  C:/python/packagelister/tests/test_packagelister.py
typing_extensions:
  C:/python/packagelister/src/packagelister/packagelister.py

C:/python/packagelister>packagelister -g
Scanning C:/python/packagelister...
[______________________________________________]-100.00%
Packages imported by packagelister:
pathier v1.3.4
printbuddies v1.4.1
pytest v7.2.1
typing_extensions v4.7.1
Generating `requirements.txt`.

C:/python/packagelister>type requirements.txt
pathier>=1.3.4
printbuddies>=1.4.1
pytest>=7.2.1

whouses:

Given a package name, scan the current directory for which sub-directories use that package.
Useful for knowing which projects you'll need to update when upgrading an installed package.

C:/python>whouses -h
usage: whouses [-h] [-i [IGNORE ...]] package

Determine what sub-folders in the current directory use the specified package. Useful for knowing which projects need to be updated when upgrading an installed package.

positional arguments:
  package               Scan the current working directory for project folders that use this package.

options:
  -h, --help            show this help message and exit
  -i [IGNORE ...], --ignore [IGNORE ...]
                        Ignore these folders.

C:/python>whouses pathier -i envs pkgs
[______________________________________________]-100.00% Scanning scriptcheck...

The following folders have files that use pathier:
recon
jobglob
getToTheGig
databased
packagelister
gearshed
homecloud
hassle
hailmary
conflict
codecount
quickdrop
play
wellversed
pressured
gitbetter
crosseyed
dupechecker
seating
tomfoolery
notes
morbin
requester
gruel
loggi
scriptcheck

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

packagelister-2.0.1.tar.gz (7.0 kB view details)

Uploaded Source

Built Distribution

packagelister-2.0.1-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file packagelister-2.0.1.tar.gz.

File metadata

  • Download URL: packagelister-2.0.1.tar.gz
  • Upload date:
  • Size: 7.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.0

File hashes

Hashes for packagelister-2.0.1.tar.gz
Algorithm Hash digest
SHA256 70b06190aa973c492a126b84ce0871a3205cbc1abd2abab2e14a78e4c1e3b89e
MD5 29d28919c828ec8a08a3f2ce30af973c
BLAKE2b-256 a6514533a4a7b8d98a051acda04322a83909d392516a368fd77141376c0deb77

See more details on using hashes here.

File details

Details for the file packagelister-2.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for packagelister-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 939d7051dc6f4ea37c500bc009eeb1a00533b392da73e03ee84486238c8adf5c
MD5 2dcd6da8628786f4ca7af32795d85a68
BLAKE2b-256 173ccd7efb9885f63bb586070a5eb56d3d471906d6b66e83a353d9f5e893ed05

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page