Skip to main content
Version: 2.12 (deprecated)

python-infer


Options controlling which dependencies will be inferred for Python targets.

Backend: pants.backend.python

Config section: [python-infer]

Basic options

assets

--[no-]python-infer-assets
PANTS_PYTHON_INFER_ASSETS
pants.toml
[python-infer]
assets = <bool>
default: False

Infer a target's asset dependencies based on strings that look like Posix filepaths, such as those given to open or pkgutil.get_data. To ignore any false positives, put !{bad_address} in the dependencies field of your target.

assets_min_slashes

--python-infer-assets-min-slashes=<int>
PANTS_PYTHON_INFER_ASSETS_MIN_SLASHES
pants.toml
[python-infer]
assets_min_slashes = <int>
default: 1

If --assets is True, treat valid-looking strings with at least this many forward slash characters as potential assets. E.g. 'data/databases/prod.db' will be treated as a potential candidate if this option is set to 2 but not to 3.

conftests

--[no-]python-infer-conftests
PANTS_PYTHON_INFER_CONFTESTS
pants.toml
[python-infer]
conftests = <bool>
default: True

Infer a test target's dependencies on any conftest.py files in the current directory and ancestor directories.

entry_points

--[no-]python-infer-entry-points
PANTS_PYTHON_INFER_ENTRY_POINTS
pants.toml
[python-infer]
entry_points = <bool>
default: True

Infer dependencies on targets' entry points, e.g. pex_binary's entry_point field, python_awslambda's handler field and python_distribution's entry_points field.

imports

--[no-]python-infer-imports
PANTS_PYTHON_INFER_IMPORTS
pants.toml
[python-infer]
imports = <bool>
default: True

Infer a target's imported dependencies by parsing import statements from sources.

To ignore a false positive, you can either put # pants: no-infer-dep on the line of the import or put !{bad_address} in the dependencies field of your target.

inits

--[no-]python-infer-inits
PANTS_PYTHON_INFER_INITS
pants.toml
[python-infer]
inits = <bool>
default: False

Infer a target's dependencies on any __init__.py files in the packages it is located in (recursively upward in the directory structure).

Even if this is disabled, Pants will still include any ancestor __init__.py files, only they will not be 'proper' dependencies, e.g. they will not show up in /home/josh/work/scie-pants/dist/pants dependencies and their own dependencies will not be used.

If you have empty __init__.py files, it's safe to leave this option off; otherwise, you should enable this option.

string_imports

--[no-]python-infer-string-imports
PANTS_PYTHON_INFER_STRING_IMPORTS
pants.toml
[python-infer]
string_imports = <bool>
default: False

Infer a target's dependencies based on strings that look like dynamic dependencies, such as Django settings files expressing dependencies as strings.

To ignore any false positives, put !{bad_address} in the dependencies field of your target.

string_imports_min_dots

--python-infer-string-imports-min-dots=<int>
PANTS_PYTHON_INFER_STRING_IMPORTS_MIN_DOTS
pants.toml
[python-infer]
string_imports_min_dots = <int>
default: 2

If --string-imports is True, treat valid-looking strings with at least this many dots in them as potential dynamic dependencies. E.g., 'foo.bar.Baz' will be treated as a potential dependency if this option is set to 2 but not if set to 3.

unowned_dependency_behavior

--python-infer-unowned-dependency-behavior=<UnownedDependencyUsage>
PANTS_PYTHON_INFER_UNOWNED_DEPENDENCY_BEHAVIOR
pants.toml
[python-infer]
unowned_dependency_behavior = <UnownedDependencyUsage>
one of: error, warning, ignore
default: ignore

How to handle imports that don't have an inferrable owner.

Usually when an import cannot be inferred, it represents an issue like Pants not being properly configured, e.g. targets not set up. Often, missing dependencies will result in confusing runtime errors like ModuleNotFoundError, so this option can be helpful to error more eagerly.

To ignore any false positives, either add # pants: no-infer-dep to the line of the import or put the import inside a try: except ImportError: block.

Advanced options

None

Deprecated options

None

None