Исключить каталог при сборке python .whl? - PullRequest
1 голос
/ 24 октября 2019

Учитывая базу кода Python с 3 подкаталогами: общие, частные, публичные, как мне создать файл колеса Python, исключающий один из каталогов?

В частности, я хочусоздайте файл колеса, который включает common и public, но исключает private

У меня есть следующие настройки:

mypackage/
    mylib/
        commmon/
            __init__.py
           ... common code ...
        private/
            __init__.py
            ... private code ...
        public/
            __init__.py
            ... public code ...
    setup_public.py
    setup_private.py

Мой setup_public.py выглядит следующим образом:

imoprt setuptools

setuptools.setup(
    name="public",
    version="0.1.0",
    author="james",
    description="public pkg",
    packages=setuptools.find_packages(exclude=("mylib/private",)), 
    classifiers=[
        "Programming Language :: Python :: 3",
    ],
)

Когда я собираю и устанавливаю пакет:

python3 setup_public.py sdist bdist_wheel
pip3 install dist/public-0.1.0-py3-none-any.whl

И затем проверяю, чтобы исключить общий каталог, я обнаружил, что он все еще там:

python3

# works, as expected
>>> import mylib.public 

# also works, unexpected! i do not want to expose this code
>>> import mylib.private

Разделение кода на 3 отдельных пакета здесь не представляется возможным по техническим причинам, поэтому я ищу решение, которое позволит мне настроить setuptools на игнорирование папки.

1 Ответ

1 голос
/ 24 октября 2019

У вас есть простая ошибка в скрипте установки, эта строка:

packages=setuptools.find_packages(exclude=("mylib/private",)), 

Должно быть:

packages=setuptools.find_packages(exclude=("mylib.private",)), 

т.е. исключая имя пакета, а не путь к файловой системе.

...