Python code protection
Project description
Industry-grade Python code protection.
For a comprehensive license management solution that is both developer- and user-friendly, check out the Stonefish License Manager.
Quickstart
Protecting Python Packages
To protect a Python project using the Stonefish Code Shield, ensure that it
includes a minimal
pyproject.toml
file. Then simple replace your build system (e.g., setuptools
) with
stonefish_code_shield
in the pyproject.toml
file:
[build-system]
# requires = ["setuptools"]
# build-backend = "setuptools.build_meta"
requires = ["stonefish-code-shield"]
build-backend = "stonefish_code_shield.build_meta"
# ...
# additional project metadata as per PEP 621
# <https://peps.python.org/pep-0621/>
# (recommended)
# ...
Done! Your project is now protected with Stonefish Code Shield. Try it out by running
pip install .
or
(pip install build)
python -m build . --wheel
[!TIP]
In some situations, turning off code protection can be beneficial, for example when testing your software. To turn off Stonefish Code Shield, build with
python -m build . --wheel -Cstonefish=off
When testing with tox, a possible config is
[tox] envlist = py3 [testenv:.pkg] passenv = * config_settings_build_wheel = stonefish-code-shield = off [testenv] passenv = * package = wheel deps = pytest commands = pytest
Protecting Standalone Python Scripts
For individual Python files, you can use the scs
command-line utility:
scs /path/to/file.py
Guidelines
Here are some guidelines to keep in mind while working with Stonefish Code Shield:
-
Stonefish renames class and function names, so relying on the
__name__
attribute in your code won't be possible. -
Stonefish cannot yet handle relative
*
imports, e.g.,from .utils import *
Make all imports explicit:
from .utils import div_to_mod, Extractor
-
Stonefish discards private (underscored) names from the API. If you want your users to use these variables or functions, you'll have to rename them.
-
Users must add
*.dat
files to their package data, e.g.,[tool.setuptools.package-data] "*" = ["*.dat"]
in
pyproject.toml
. This is because the encrypted code must be shipped with the package. -
Local imports should be relative (
from . import x
) instead of using absolute imports (import x
) ifx/
orx.py
is an internal folder or directory. -
Stonefish places all data files in a flat directory structure, so it cannot handle files that are read from two different Python paths.
./data.dat ./a.py Path(__file__).parent / "data.dat" ./b/b.py Path(__file__).parent / .. / "data.dat"
More info
For details on on Stonefish Code Shield protects your code, see here.
Contact support@mondaytech.com for more info.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for stonefish_code_shield-0.3.33-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09f758e8b0cea8564a2b03754c666f8a96e2516b9579234e5e6774fdf75a0961 |
|
MD5 | cb0d898cc394da936dbd6ca59b7eb724 |
|
BLAKE2b-256 | 003b6e4cc5d00d5743732de6d37f1c4cacec095e2618de3fafa149f7281f8c5d |