Skip to main content

Use Cython to compile Python code to binary and support git-diff to get changed files conveniently.

Project description

简体中文

Encrypt your Python project

Use Cython to compile Python code to binary and support git-diff to get changed files conveniently.

Installation

$ pip install encryptpy

Basic Usage

Usage: encryptpy [OPTIONS] COMMAND [ARGS]...

  Encrypt your Python code

Options:
  --config TEXT  The config file, ignore if given is invalid  [default:
                 .encryptpy.cfg]
  --help         Show this message and exit.

Commands:
  clean     Simply clean `build` and `__pycache__` directory in DIRS
  git-diff  Compile files between two COMMITS, see `git-diff`: `--name-only`
  init      Copy src to build-dir and do compile, usually used for the...
  run       Compile given Python code files

For the subcommand info, use encryptpy <subcommand> --help.

Examples

For example, there is a package named package_a (notice the work directory):

$ tree -a .

.
├── .encryptpy.cfg
└── package_a
    ├── __init__.py
    ├── main.py
    ├── README.md
    ├── setup.py
    └── utils.py

1 directory, 6 files

The .encryptpy.cfg's contents are as follow:

[encryptpy]
; Files will be compiled
paths =
    package_a
; Files will be ignored when compiling, support Regex
ignores =
    setup.py
; For command `init`, files will be ignored when copying, Glob-style
copy_ignores =
    *.pyc
    *.md
; The build directory
build_dir = build
; For commands `run` and `git-diff`, whether the source .py will be removed
clean_py = 0

1. Use in the first time

$ encryptpy init .

Look the build directory:

$ tree -a build

build
├── .encryptpy.cfg
└── package_a
    ├── __init__.cpython-38-x86_64-linux-gnu.so
    ├── main.cpython-38-x86_64-linux-gnu.so
    ├── setup.py
    └── utils.cpython-38-x86_64-linux-gnu.so

1 directory, 5 files

2. Use normally by run

$ encryptpy run package_a/main.py

The package_a/main.py will be recompiled to package_amain.cpython-38-x86_64-linux-gnu.so

3. Use normally by git-diff

$ encryptpy git-diff 0.1 0.2

The changed files between tag(or commit, or branch) 0.1 and 0.2 will be compiled.

Defect

The defects mainly come from Cython - some Python code can not be compiled correctly. Here are known issues:

  1. Assignment Expressions :=: Implement PEP 572: Assignment Expressions #2636

  2. @dataclass: Implement @dataclass for cdef classes #2903

  3. Class method decorators combination: Combining @staticmethod with other decorators is broken #1434

    e.g.

    class C:
        @staticmethod
        @some_decorator
        def f():
            pass
    

    but this can be rewrite to f = staticmethod(some_decorator(f)), it's ok.

If you have some code like the above, you can refactor or just ignore them, it is safe enough for most projects.

2022.08.10 UPDATE: It seems that the first two defects have been resolved.

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

encryptpy-1.0.6.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

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

encryptpy-1.0.6-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file encryptpy-1.0.6.tar.gz.

File metadata

  • Download URL: encryptpy-1.0.6.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for encryptpy-1.0.6.tar.gz
Algorithm Hash digest
SHA256 88b5e34896762e44f9192639e8a153d1e1191004d6bbbdf0b817bbca3882dd3e
MD5 bf5653f2a4c701f4be27d4ea3e7a96b5
BLAKE2b-256 bf80b68c7b1ff9e5d3a670ab547cb72e2e98ebe54a4d0f9eeec5ab0ae7297dc9

See more details on using hashes here.

File details

Details for the file encryptpy-1.0.6-py3-none-any.whl.

File metadata

  • Download URL: encryptpy-1.0.6-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for encryptpy-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 2a114fb6950832cbc7fe2e104839622bb91552dc4d6641ac498e8208e5e533d5
MD5 ed4fc33059c953d627c33657e7b02f4c
BLAKE2b-256 4604ab1af711e364047f7577bd320f11cd66524261392ca63908e55dcd67526d

See more details on using hashes here.

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