Skip to content

paqstd-dev/sharedlib

Repository files navigation

sharedlib

PyPI version PyPI Supported Python Versions

Pythonic way for use "shared" folder of packages in monorepo. Without dependencies!

Install package

Install using pip:

pip install sharedlib

Install using uv:

uv add sharedlib

Local usage

First, we need to import “sharedlib” into the file where we will use the shared packages:

import sharedlib

Then import a “shared” package with the same name as specified in the config settings:

import my_shared_pkg
from my_shared_pkg import a, b, c
from my_shared_pkg.a.b.c import d

And it's working! Python registers a package with the specified name and you can use that in your files.

A complete example:

# file: service1/routes/admin.py
import sharedlib

# file: service2/models/user.py
import sharedlib

# original folder: custom_shared/
import my_shared_pkg

# original folders: custom_shared/a, custom_shared/b, custom_shared/c
from my_shared_pkg import a, b, c

# original folder: custom_shared/a/b/c, file: d.py
from my_shared_pkg.a.b.c import d

print(a, b, c, d)

Shared module should have __init__.py file by default. This limitation will be fixed later.

An example of a file structure:

service1/
    venv/
    main.py
    requirements.txt
    ...
service2/
    venv/
    main.py
    requirements.txt
    ...
common/
    __init__.py
    ...
pyproject.toml
sharedlib.ini

Docker usage

You can also use Docker to work with a monorepository. To configure the shared module, you need to add the shared folder to the service container.

# you can use any python >= 3.8
FROM python:3.12-slim

# ...before logic
COPY ./service1 /app
COPY ./common /common
COPY sharedlib.ini sharedlib.ini

WORKDIR /app
# ...after logic

Configuration file

The order of configuration search is simple - first look at the pyproject.toml file. Then look at sharedlib.ini file - this file has priority over pyproject.toml because it is an explicit config.

If both files are configured, sharedlib.ini will overwrite all settings.

sharedlib.ini

[sharedlib]
folder_name = custom_shared
import_name = my_shared_pkg

Important: The configuration file must be located in the root of the project. Otherwise imports will not work properly.

pyproject.toml

[tool.sharedlib]
folder_name = "custom_shared"
import_name = "my_shared_pkg"

Contributing

If you would like to suggest a new feature, you can create an issue on the GitHub repository for this project. Also you can fork the repository and submit a pull request with your changes.

License

This project is licensed under the MIT License. See the LICENSE file for more information.

About

Pythonic way for use "shared" folder of packages in monorepo

Topics

Resources

License

Stars

Watchers

Forks

Languages