我正在Mac OSX上的Python 3.4.2中工作,我有一个简单的版本控制的Python项目,其目录/文件结构如下所示:
vcs_projectname/
foo/
__init__.py
simplefunc.py
docs/
other_related_stuff/
__init__.py
文件如下所示:
并且simplefunc.py
文件如下所示:
def helloworld():
print('Hello world!')
通过将cd4{my目录中的一个^{my目录中的^{my)设置为^{mydirectory中的 在ipython中,我导入foo包,然后查看其目录结构,结果如下: 我的问题:如何在包目录结构中去掉对> cd ~
> export PYTHONPATH=~/vcs_projectname
> ipython
In [1]: import foo
In [2]: dir(foo)
Out[2]:
['__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__path__',
'__spec__',
'helloworld',
'simplefunc']
simplefunc
文件模块的引用?这是可取的,因为在最好的情况下,它只是无用的杂波(我们不需要它,因为我们真正想要的东西,helloworld()
函数,已经由__init__.py
文件在包级别可用),在最坏的情况下,它本质上是对不相关的实现细节(底层文件)的引用项目的结构)以后可能会改变,因此我不希望我的用户在未来的版本中期待和依赖它。在
你想做的事是不可能优雅的。正如@Lukas所提到的,有一些黑客可以做到这一点。在
相反,我所遵循的是,创建一个名为
_private
的子包,并将所有这样的模块放入其中。这样当用户导入包时,所有公开的api都是可用的,私有api被隐藏在_private
中。在示例:
^{pr2}$foo/__init__.py
:foo/_private/__init__.py
:
^{4}$foo/_private/test1.py
:foo/_private/test2.py
:导入
foo
:您可以通过将
del simplefunc
添加到您的foo/__init__.py
中来完成您的既定目标,如下所示:相关问题 更多 >
编程相关推荐