Skip to main content

pyflyby - Python development productivity tools, in particular automatic import management

Project description

https://badge.fury.io/py/pyflyby.svg https://travis-ci.org/deshaw/pyflyby.png?branch=master

Pyflyby is a set of Python programming productivity tools for Python.

For command-line interaction:
  • py: command-line multitool

For IPython interaction:
  • autoimporter: automatically imports symbols when needed.

For editing python source code:
  • tidy-imports: adds missing ‘import’s, removes unused ‘import’s, and also reformats import blocks.

  • find-import: prints to stdout how to import a particular symbol.

  • reformat-imports: reformats import blocks

  • collect-imports: prints out all the imports in a given set of files.

  • collect-exports: prints out definitions in a given set of modules, in the form of import statements.

  • transform-imports: renames imported modules/functions.

Learn more about Pyflyby in this blog post.

Installation

$ pip install pyflyby
This creates an alias for your ipython named py which runs the pyflyby plug internally.

pyflyby has a dependency on ipython, if it isn’t already installed do install it with:

$ pip install ipython

Quick start: Autoimporter + IPython

$ py
In [1]: re.search("[a-z]+", "....hello...").group(0)
[PYFLYBY] import re
Out[1]: 'hello'

In [2]: chisqprob(arange(5), 2)
[PYFLYBY] from numpy import arange
[PYFLYBY] from scipy.stats import chisqprob
Out[2]: [ 1.      0.6065  0.3679  0.2231  0.1353]

To load pyflyby into an existing IPython session as a 1-off:

$ ipython
In [1]: %load_ext pyflyby

To configure IPython/Jupyter Notebook to load pyflyby automatically:

$ py pyflyby.install_in_ipython_config_file

or

$ echo 'c.InteractiveShellApp.extensions.append("pyflyby")' \
  >> ~/.ipython/profile_default/ipython_config.py

$ ipython
In [1]: b64decode('aGVsbG8=')
[PYFLYBY] from base64 import b64decode
Out[1]: 'hello'

Auto importer lazy variables

It is possible to use the autoimporter to lazily define variables.

To use, put the following in your IPython startup files (~/.ipython/profile_default/startup/autoimp.py), or in your IPython configuration file:

from pyflyby import add_import

add_import("foo", "foo = 1")

add_import(
    "df, data as dd",
    '''
    import pandas as pd
    data = [1,2,3]
    df =  pd.DataFrame(data)
''')

You can add the keyword strict=False to not fail if not in IPython or of the pyflyby extensions is not loaded.

Quick start: py command-line multi-tool

$ py b64decode aGVsbG8=
[PYFLYBY] from base64 import b64decode
[PYFLYBY] b64decode('aGVsbG8=', altchars=None)
'hello'

$ py log2 sys.maxint
[PYFLYBY] from numpy import log2
[PYFLYBY] import sys
[PYFLYBY] log2(9223372036854775807)
63.0

$ py 'plot(cos(arange(30)))'
[PYFLYBY] from numpy import arange
[PYFLYBY] from numpy import cos
[PYFLYBY] from matplotlib.pyplot import plot
[PYFLYBY] plot(cos(arange(30)))
<plot>

$ py 38497631 / 13951446
2.7594007818257693

$ py foo.py

Quick start: tidy-imports

To use tidy-imports, just specify the filename(s) to tidy.

For example:

$ echo 're.search("[a-z]+", "....hello..."), chisqprob(arange(5), 2)' > foo.py

$ tidy-imports foo.py
--- /tmp/foo.py
+++ /tmp/foo.py
@@ -1 +1,9 @@
+from __future__ import absolute_import, division, with_statement
+
+from   numpy                    import arange
+from   scipy.stats              import chisqprob
+import re
+
 re.search("[a-z]+", "....hello..."), chisqprob(arange(5), 2)

Replace /tmp/foo.py? [y/N]

To exclude a file, use –exclude <pattern>.

Local imports

By default, tidy-imports only touches top-level import statements. To also tidy imports inside function and class bodies (removing unused local imports), use the --tidy-local-imports flag:

$ tidy-imports --tidy-local-imports foo.py

You can make this the default for a project via pyproject.toml (see Per-Project configuration of tidy-imports).

Ignoring specific imports

To keep a particular import that would otherwise be removed as unused, add the # tidy-imports: ignore-import comment pragma to that line:

import os  # tidy-imports: ignore-import

This works for both top-level and local imports, and for from style imports:

from mypackage import _setup_hooks  # tidy-imports: ignore-import

def foo():
    import pdb  # tidy-imports: ignore-import
    ...

Quick start: import libraries

Create a file named .pyflyby with lines such as

from mypackage.mymodule import MyClass, my_function
import anotherpackage.anothermodule

You can put this file in your home directory or in the same directory as your *.py files.

Details: automatic imports

AUTOMATIC IMPORTS - never type “import” again!

This module allows your “known imports” to work automatically in your IPython interactive session without having to type the ‘import’ statements (and also without having to slow down your Python startup with imports you only use occasionally).

Example:

In [1]: re.search("[a-z]+", "....hello...").group(0)
[PYFLYBY] import re
Out[1]: 'hello'

In [2]: chisqprob(arange(5), 2)
[PYFLYBY] from numpy import arange
[PYFLYBY] from scipy.stats import chisqprob
Out[2]: [ 1.      0.6065  0.3679  0.2231  0.1353]

In [3]: np.sin(arandom(5))
[PYFLYBY] from numpy.random import random as arandom
[PYFLYBY] import numpy as np
Out[3]: [ 0.0282  0.0603  0.4653  0.8371  0.3347]

In [4]: isinstance(42, Number)
[PYFLYBY] from numbers import Number
Out[4]: True

It just works

Tab completion works, even on modules that are not yet imported. In the following example, notice that numpy is imported when we need to know its members, and only then:

$ ipython
In [1]: nump<TAB>
In [1]: numpy
In [1]: numpy.arang<TAB>
[PYFLYBY] import numpy
In [1]: numpy.arange

The IPython “?” magic help (pinfo/pinfo2) automatically imports symbols first if necessary:

$ ipython
In [1]: arange?
[PYFLYBY] from numpy import arange
... Docstring: arange([start,] stop[, step,], dtype=None) ...

Other IPython magic commands work as well:

$ ipython
In [1]: %timeit np.cos(pi)
[PYFLYBY] import numpy as np
[PYFLYBY] from numpy import pi
100000 loops, best of 3: 2.51 us per loop

$ echo 'print arange(4)' > foo.py
$ ipython
In [1]: %run foo.py
[PYFLYBY] from numpy import arange
[0 1 2 3]

Implementation details

The automatic importing happens at parse time, before code is executed. The namespace never contains entries for names that are not yet imported.

This method of importing at parse time contrasts with previous implementations of automatic importing that use proxy objects. Those implementations using proxy objects don’t work as well, because it is impossible to make proxy objects behave perfectly. For example, instance(x, T) will return the wrong answer if either x or T is a proxy object.

Details: import libraries

Pyflyby uses “import libraries” that tell how to import a given symbol.

An import library file is simply a python source file containing ‘import’ (or ‘from … import …’) lines. These can be generated automatically with collect-imports and collect-exports.

Known imports

Find-imports, tidy-imports, and autoimport consult the database of known imports to figure out where to get an import. For example, if the imports database contains:

from numpy import arange, NaN

then when you type the following in IPython:

print(arange(10))

the autoimporter would automatically execute from numpy import arange.

The database can be one file or multiple files. This makes it easy to have project-specific known_imports along with global and per-user defaults.

The PYFLYBY_PATH environment variable specifies which files to read. This is a colon-separated list of filenames or directory names. The default is:

PYFLYBY_PATH=/etc/pyflyby:~/.pyflyby:.../.pyflyby

If you set:

PYFLYBY_PATH=/foo1/bar1:/foo2/bar2

then this replaces the default.

You can use a hyphen to include the default in the path. If you set:

PYFLYBY_PATH=/foo1/bar1:-:/foo2/bar2

then this reads /foo1/bar1, then the default locations, then /foo2/bar2.

In $PYFLYBY_PATH, .../.pyflyby (with _three_ dots) means that all ancestor directories are searched for a member named “.pyflyby”.

For example, suppose the following files exist:

/etc/pyflyby/stuff.py
/u/quarl/.pyflyby/blah1.py
/u/quarl/.pyflyby/more/blah2.py
/proj/share/mypythonstuff/.pyflyby
/proj/share/mypythonstuff/foo/bar/.pyflyby/baz.py
/.pyflyby

Further, suppose:

  • /proj is on a separate file system from /.

  • $HOME=/u/quarl

Then tidy-imports /proj/share/mypythonstuff/foo/bar/quux/zot.py will by default use the following:

/etc/pyflyby/stuff.py
/u/quarl/.pyflyby/blah1.py
/u/quarl/.pyflyby/more/blah2.py
/proj/share/mypythonstuff/foo/bar/.pyflyby/baz.py
/proj/share/mypythonstuff/.pyflyby (a file)

Forgetting imports

Occasionally you may have reason to tell pyflyby to “forget” entries from the database of known imports.

You can put the following in any file reachable from $PYFLYBY_PATH:

__forget_imports__ = ["from numpy import NaN"]

This is useful if you want to use a set of imports maintained by someone else except for a few particular imports.

Entries in $PYFLYBY_PATH are processed left-to-right in the order specified, so put the files containing these at the end of your $PYFLYBY_PATH. By default, tidy-imports and friends process /etc/pyflyby, then ~/.pyflyby, then the per-directory .pyflyby.

Mandatory imports

Within a certain project you may have a policy to always include certain imports. For example, maybe you always want to do from __future__ import division in all files.

You can put the following in any file reachable from $PYFLYBY_PATH:

__mandatory_imports__ = ["from __future__ import division"]

To undo mandatory imports inherited from other .pyflyby files, use __forget_imports__ (see above).

Canonicalize imports

Sometimes you want every run of tidy-imports to automatically rename an import to a new name.

You can put the following in any file reachable from $PYFLYBY_PATH:

__canonical_imports__ = {"oldmodule.oldfunction": "newmodule.newfunction"}

This is equivalent to running:

tidy-imports --transform=oldmodule.oldfunction=newmodule.newfunction

Soapbox: avoid “star” imports

When programming in Python, a good software engineering practice is to avoid using from foopackage import * in production code.

This style is a maintenance nightmare:

  • It becomes difficult to figure out where various symbols (functions/classes/etc) come from.

  • It’s hard to tell what gets shadowed by what.

  • When the package changes in trivial ways, your code will be affected. Consider the following example: Suppose foopackage.py contains import sys, and myprogram.py contains from foopackage import *; if some_condition: sys.exit(0). If foopackage.py changes so that import sys is removed, myprogram.py is now broken because it’s missing import sys.

To fix such code, you can run tidy-imports --replace-star-imports to automatically replace star imports with the specific needed imports.

Per-Project configuration of tidy-imports

You can configure Pyflyby on a per-repository basis by using the [tool.pyflyby] section of pyproject.toml files. Pyflyby will look in current working directory and all it’s parent until it find a pyproject.toml file from which it will load the defaults.

Most of the long command line flags default values can be configured in this section. Simply use the long form option name by replacing dashes - by underscore _. For long option that have the form --xxx and --no-xxx, you can assign a boolean to xxx. For example:

.. code:: toml

[tool.pyflyby] add_missing=true from_spaces=7 remove_unused=false tidy_local_imports=true

To exclude files from tidy-imports, add an exclusion pattern to tool.pyflyby.tidy-imports.exclude:

[tool.pyflyby.tidy-imports]
exclude = [
    "foo.py",
    "baz/*.py"
]

Exclusions are assumed to be relative to the project root if a pyproject.toml exists, unless an absolute path is specified. Consult the documentation for pathlib.Path.match for information about valid exclusion patterns.

Emacs support

  • To get a M-x tidy-imports command in GNU Emacs, add to your ~/.emacs:

    (load "/<site-packages>/pyflyby/share/emacs/site-lisp/pyflyby.el")
  • Pyflyby.el doesn’t yet work with XEmacs; patches welcome.

saveframe: A utility for debugging / reproducing an issue

PyFlyBy provides a utility named saveframe which can be used to save information for debugging / reproducing an issue.

Usage: If you have a piece of code or a script that is failing due an issue originating from upstream code, and you cannot share your private code as a reproducer, use this utility to save relevant information to a file. Share the generated file with the upstream team, enabling them to reproduce and diagnose the issue independently.

Information saved in the file: This utility captures and saves error stack frames to a file. It includes the values of local variables from each stack frame, as well as metadata about each frame and the exception raised by your code.

This utility comes with 2 interfaces:

  1. A function: For interactive usages such as IPython, Jupyter Notebook, or a debugger (pdb/ipdb), use pyflyby.saveframe function. To know how to use this function, checkout it’s documentation:

In [1]: saveframe?
  1. A script: For cli usages (like a failing script), use pyflyby/bin/saveframe script. To know how to use this script, checkout its documentation:

$ saveframe --help

Authorship

This plugin was contributed back to the community by the D. E. Shaw group.

https://www.deshaw.com/assets/logos/blue_logo_417x125.png

Pyflyby is written by Karl Chen <quarl@8166.clguba.z.quarl.org>

We love contributions! Before you can contribute, please sign and submit this Contributor License Agreement (CLA). This CLA is in place to protect all users of this project.

License

Pyflyby is released under a very permissive license, the MIT/X11 license; see LICENSE.txt.

Release

  1. Check version number in lib/python/pyflyby/_version.py, maybe increase it.

  2. Commit and tag if necessary, and push tags/commits.

  3. Optional: Set SOURCE_DATE_EPOCH for reproducible build:

    export SOURCE_DATE_EPOCH=$(git show -s --format=%ct HEAD)
  4. Build the SDIST:

    python setup.py sdist
  5. Optional Repack the Sdist to make sure the ZIP only contain SOURCE_DATE_EPOCH date using IPython tools:

    python ~/dev/ipython/tools/retar.py dist/pyflyby-1.7.8.tar.gz
    shasum -a 256 dist/*
  6. Optional, redo 4 & 5 to verify checksum is unchanged.

  7. Upload using twine:

    twine upload dist/*
  8. Check/update https://github.com/conda-forge/pyflyby-feedstock for new pyflyby release on conda-forge

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

pyflyby-1.10.6.tar.gz (340.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyflyby-1.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (397.3 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp314-cp314t-macosx_11_0_arm64.whl (300.4 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

pyflyby-1.10.6-cp314-cp314-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (396.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp314-cp314-macosx_11_0_arm64.whl (296.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pyflyby-1.10.6-cp313-cp313-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (396.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp313-cp313-macosx_11_0_arm64.whl (296.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pyflyby-1.10.6-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (396.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp312-cp312-macosx_11_0_arm64.whl (296.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pyflyby-1.10.6-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (395.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp311-cp311-macosx_11_0_arm64.whl (296.3 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

pyflyby-1.10.6-cp310-cp310-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

pyflyby-1.10.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (393.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

pyflyby-1.10.6-cp310-cp310-macosx_11_0_arm64.whl (294.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file pyflyby-1.10.6.tar.gz.

File metadata

  • Download URL: pyflyby-1.10.6.tar.gz
  • Upload date:
  • Size: 340.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyflyby-1.10.6.tar.gz
Algorithm Hash digest
SHA256 e3db6c51c65c0f836e3669b2eb8feea0fa4bce6927e0c45f5532ac4c4b0dbc60
MD5 db8d7822b6bc4df8f9ac389059b702b6
BLAKE2b-256 f1b4c43c04b4129c0018a022137882a9bf7691e74649ae3294ee5794f4d3c36b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6.tar.gz:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 991edab4ef4b3c0deb1c38034dee6eacc7f65bc747a0d0ce8f584eaa4dd4772a
MD5 62c7b6287f6e8c8aaeac05e772124466
BLAKE2b-256 06ac619f9d651cf25b709921d2577ed987ff343fb22ae7d87a1bce33438f3e25

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 36f3b5c23ca0874b2620dafd7fb7c441ba715163d4fc7d654161216dee5a4075
MD5 111f99644b6f266595271168094b582d
BLAKE2b-256 d971798d8c107387bac2f6f64ce173f905f5acef656a34be048ea10e4d23d8e0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3baa497a772fedec46720d8d438bca1352df00bb5fba12350aca4432310c1f63
MD5 8e4a9efe503325709319d8066fc614f9
BLAKE2b-256 41623f4a8737170023d5b0651d94a33e2e6433b9704488aeb6c8b4df67ad860d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 00a0b11116f80565b75d378e629fc785febced2378dc13d66921ed4b6766b929
MD5 c71c0bb74c25360be5f58aa90790f459
BLAKE2b-256 6e70965d8f1d0f29f18cf640dbd3f0020eec9c7383892c64265246289dce7465

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 64ea1214b73bd5d09636f420076844faf94fcacbd25e6e5bba4ff18786401d1a
MD5 21739fc4117f8ba8dac9fa2235784879
BLAKE2b-256 7adf9da75e3f396ee8fc079ed5ea4ea00b849057fe6c37a165aff1d782eeb9d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2fd4adcc6457a7284176bf8503483be15d5d5890e774874a2cffa8bd02346123
MD5 6445798cc4491e6c4f9758a8b9b99a04
BLAKE2b-256 90927d5787d89db44e9ed403abf540b159f57dfa0b7d03543c77aed33697ad5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ba5c21f8f30a0f6563a40a3c0bc667aace27c557bc28f3052a3e096ad4fd0a6b
MD5 dde384b20cf3ce97a63ff31c0923f1da
BLAKE2b-256 3e81b285315376bafcf3f749f471abff29180afe27e4583259b957992a17f712

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 df910f8880bcb1f4da1722d05835b36877c630799eecf6516eea3ecf16462f93
MD5 f3cae8f314a3629817dcda56ccd76b9c
BLAKE2b-256 fcef627a0c82be9ff6d90ee475e95ea54c7dc7797648704ccd53f853c83d48b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9e442ce5758331b706f3b263fc68ffcd80e1a39bdac243cb60507d142c92f406
MD5 e68f7a9586940089308134b487df19ac
BLAKE2b-256 b138c44ec047d62f58c0db41039868168715eac0884ffe8a546761af3132af53

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 64e5a2876903931b94328291df049b83f9dbe3ebe53baa3c36face277041dfa7
MD5 40ac60597ea382ba327ed8e3c9239753
BLAKE2b-256 5a9670a3d7538aeab469c466d3270bb2f21db5fa534ce2fbe5b154f6f63858dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 07fbbc7de84fe0f343578af5019bff477a604e0294ed54122f7c1a19a607ffda
MD5 3c0a684c1e96f6e0fafb9ea43a26e5fc
BLAKE2b-256 d54147ede032a1887dc0f15de69baf60dbe25650cf40ec7e4709c83ae0912a4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fe411c87b7342b6f1bac8608d30b8eaa923d3daaf6c2955d07ba69d550ee43e0
MD5 b3ed64013f3d7c95c548f23b956ded44
BLAKE2b-256 7f7770cc0a9f0c5c81e059d09260c158ad39ab9a3b2886d247b7ab47eb965757

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 6ca3ce054193ad86fc8a0ec9d5e53c60dd71ceb8272207b6faeec2a6f452911e
MD5 ad26b4a4f7105204dccbe1f09abce9db
BLAKE2b-256 d21f1fa12538b03adef6b034ce00be0b3ad1ecde1f52d5d40cebf9fa82ec90a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f8c3c0f386447d6e06be6dee6e6eb7814d057e13b53f46e86882ab4a27698ead
MD5 8ec4d86b912fda8b94ed186f47b62972
BLAKE2b-256 e3141c6aa7e771b5a080a8dc7f6c25b5411d252e59cbc796e3038ab913a79751

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f03071332c230f4c001a767cc69b4e6c9395313e1a30eb85cbc8e758d6f346b7
MD5 bd328653409adbbad094372b13c654fe
BLAKE2b-256 84135c325fc6b8c670f150c9b75b65f8dc186a3793063a74b25fd6b898e6726e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 206ec60bc12bdbf12ba0bbd1af56a96c87e8e64dc3d052c2f77ac50c972d3fd1
MD5 4aa715c5a1526c68a9baf2f6beb9d776
BLAKE2b-256 2199fa8b8dee117912d48085586541b64234fbc8763dddb683dd86b203824a46

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 557610e7d09a5d1e4641aa7a006dd511988dc650dab43d0b466395177358d739
MD5 2dd40c66afc8a6ca8c45bd1c7171a92c
BLAKE2b-256 dbaf8f6984c65afd59c83bfe836c737594ea205f51440c099339caad617688ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyflyby-1.10.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyflyby-1.10.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b8ac0560bde5692d8f64b58ea6d6a37070349197fa89cf4cf1b0d94ee0a71a15
MD5 30f38352f38ffd6fb1d00e8630cc3022
BLAKE2b-256 59801974e43bdb58cdb9e496b6164ffe8357a6cae8810764abc2d371e55318eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyflyby-1.10.6-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: build.yml on deshaw/pyflyby

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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