隐藏包中的实现模块和子模块

时间:2017-11-10 14:27:02

标签: python python-2.7 module pip packages

我想打包我的代码以仅公开主要功能。我的目录是这样的:

./
  setup.py
  my_module/
    __init__.py
    public_functions.py
    internal_modules/
      __init__.py
      A.py
      B.py
      other_modules.py/
        __init__.py
        C.py

public_functions中,我确实从internal_modules.A导入了一些操作,但未从internal_modules.B导入,A.pyB.py都使用C.py中的一些函数}。

我的setup.py如下:

from setuptools import setup

setup(name='my_module',
      version='0.1',
      description='my_awesome_module',
      author='Me',
      author_email='example@mail.com',
      license='MIT',
      packages=['my_module'],
      zip_safe=False)

我想用pip安装它,但我希望在安装后我的包中看不到任何internal_modules

我可以正确安装但是当我这样做时

from my_module import public_module

它会在ImportError: no module named internal_modules.A的第一行引发public_module.py

我知道如果我将my_module.internal_modules添加到我的setup.py声明中作为另一个包,我就可以解决此问题,但这会让我的internal_modules公开显示A.pyB.py来自安装包。

我发现了一个类似的问题here,但它并不适合我

1 个答案:

答案 0 :(得分:0)

您可以通过强调模块名称来隐藏导入模块的内部:

_yourmodulenamegoeshere。

E: 您还可以在包__all__中定义__init__ - 只有来自__all__的模块名称才能通过导入*导入。