видимость модуля пакета python pypi - PullRequest
1 голос
/ 25 мая 2019

Я только что опубликовал PyPi-пакет , но после того, как я pip install -дал его сам, я обнаружил, что есть много видимых модулей, которых не должно быть!

На самом делеЯ просто хочу, чтобы две функции были видны (super_clean и simple_clean), и обе они находятся в gutenberg_cleaner.py.

Я не знаю, как сделать другие модули и функции скрытыми дляПользователь.

Буду признателен за любую помощь.

Это мой setup.py, если он полезен:

from setuptools import setup

with open('README.md') as f:
    long_description = f.read()

setup(
    name="gutenberg_cleaner",
    install_requires=['nltk'],
    version='0.1.0',
    description="cleans gutenberg dataset books",
    author_email='mohsenikiasari@ce.sharif.edu',
    py_modules=["gutenberg_cleaner"],
    url="https://github.com/kiasar/gutenberg_cleaner",
    license='MIT',
    long_description=long_description,
    classifiers=[
        "Programming Language :: Python",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Operating System :: OS Independent",
    ],
)

1 Ответ

1 голос
/ 03 июня 2019

Как правило, в Python нет способа «скрыть» данную переменную / функцию / класс / модуль. Все доступно для импорта пользователю, даже вещи в стандартной библиотеке.

На практике в Python идиоматично ставить префикс чего-то, что не является частью публичного API с подчеркиванием, например:

from gutenberg_cleaner import _internal_helper_method

Это указывает вашим пользователям, которые знают об этой идиоме, что «это не предназначено для импорта».

Это на самом деле не мешает пользователю импортировать эту внутреннюю функцию, но для большинства проектов этого достаточно (и я думаю, это то, что вам следует сделать здесь).

Тем не менее, есть еще один вариант: есть сторонняя библиотека publication, которая делает именно то, что вам нужно: вы определяете список функций, которые можно импортировать, и библиотека предотвращает отдых от импорта. Он не используется широко, но он решает ваш вопрос.

...