Python 在包中隐藏实现模块和子模块
我想把代码打包成只公开主要函数。我的目录如下:Python 在包中隐藏实现模块和子模块,python,python-2.7,module,pip,packages,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\u functions中,我确实从internal\u mod
./
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\u functions
中,我确实从internal\u modules.A
导入了一些操作,但不是从internal\u modules.B
导入,并且A.py
和B.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安装它,但我不想让我的内部_模块
在安装后从我的软件包中可见
我可以安装它,但当我这样做
from my_module import public_module
它在public\u module.py
的第一行中抛出ImportError:没有名为internal\u modules.A的模块
我知道如果我将my_module.internal_modules
添加到我的setup.py
声明中作为另一个包,我可以修复它,但这将使我的internal_modules在安装的包中可见A.py
和B.py
我发现了一个类似的问题,但它对我不起作用您可以通过在模块名称下面加下划线来隐藏模块的内部内容,以防导入:
_你的模块在这里
E:
您还可以在包的\uuuuuuuuuuuuuuuuuuuu
中定义\uuuuuuuuuuuuuuuuuuu
——只有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>中的模块名将通过导入*导入,我不知道包的\uuuuuuuuuu。你能给我举个例子吗?顺便说一下,在内部模块上加下划线不起作用。与以前相同的错误(my\u module.\u internal\u modules
)\uu all\uuu=['module1','module2']
仅在从程序包导入时导入模块1和2*
。如果您愿意,您仍然可以直接访问包的内部_默认情况下,如果您导入了导入包
,则不应导入带下划线的模块,但同样,专用用户仍可访问这些模块。