我想打包我的代码以仅公开主要功能。我的目录是这样的:
./
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.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安装它,但我希望在安装后我的包中看不到任何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.py
和B.py
来自安装包。
我发现了一个类似的问题here,但它并不适合我
答案 0 :(得分:0)
您可以通过强调模块名称来隐藏导入模块的内部:
_yourmodulenamegoeshere。
E:
您还可以在包__all__
中定义__init__
- 只有来自__all__
的模块名称才能通过导入*导入。