python pypi 包模块可见性

python pypi package module visibility

我刚刚发布了一个PyPi package,但是在我自己pip install编辑之后,我发现有很多不应该的可见模块!

其实我只是想让两个函数可见(super_cleansimple_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",
    ],
)

一般来说,Python 中没有办法 "hide" 给定的 variable/function/class/module。一切都可以导入给用户,甚至是标准库中的东西。

在实践中,Python 中惯用的做法是在不属于 public API 的内容前加上下划线,例如:

from gutenberg_cleaner import _internal_helper_method

这向了解此习语的用户表明 "this is not meant to be imported"。

这实际上并没有阻止用户导入这个内部函数,但对于大多数项目来说,这就足够了(我认为这是你应该在这里做的)。

也就是说,还有另一种选择:有一个 third-party 库 publication 可以完全满足您的需求:您定义一个可以导入的函数列表,并且该库可以防止从进口休息。它没有被广泛使用,但它确实解决了你的问题。