使util文件在python中不可访问

使util文件在python中不可访问,python,module,libraries,python-packaging,Python,Module,Libraries,Python Packaging,我正在构建一个python库。我希望用户可以使用的函数在stemmer.py中。Stemmer.py使用stemmerutil.py 我想知道是否有办法让用户无法访问stemerutil.py 如果您想对用户隐藏实施细节,有两种方法可供选择。第一种使用约定来表示什么是公共API的一部分,什么不是公共API的一部分,另一种是黑客攻击 在python库中声明API的惯例是添加所有应公开到最顶层的\uuuu init\uuuuuuuuuuupy中的类/函数/名称。它没有做那么多有用的事情,现在它的主

我正在构建一个python库。我希望用户可以使用的函数在stemmer.py中。Stemmer.py使用stemmerutil.py

我想知道是否有办法让用户无法访问stemerutil.py


如果您想对用户隐藏实施细节,有两种方法可供选择。第一种使用约定来表示什么是公共API的一部分,什么不是公共API的一部分,另一种是黑客攻击


在python库中声明API的惯例是添加所有应公开到最顶层的
\uuuu init\uuuuuuuuuuupy
中的类/函数/名称。它没有做那么多有用的事情,现在它的主要用途是象征性的“请用这个,别用别的”。你的可能看起来有点像这样:

urdu/urdu/\uuuu init\uuuu.py

来自乌尔都语。词干分析器导入Foo、Bar、Baz
__全部uuu=[Foo,Bar,Baz]
为了强调这一点,您还可以在
stemerutil.py
中的所有定义的名称前加上它们,例如
def privateFunc():…
变成
def\u privateFunc():…


但是,您也可以通过将代码作为资源而不是包中的模块并动态加载来对解释器隐藏代码。这是一个黑客,可能是一个坏主意,但它在技术上是可能的

首先,将
stemerutil.py
重命名为just
stemerutil
——现在它不再是python模块,不能使用
import
关键字导入。接下来,在
stemmer.py

导入词干直到

import importlib.util
导入importlib.resources
#在python3.7及更低版本中,这是重要的lib_资源,需要首先安装
词干分析器\u util\u spec=importlib.util.spec\u from\u loader(“词干生成器”,loader=None)
stemmerUtil=importlib.util.module\u from\u spec(stemmer\u util\u spec)
使用importlib.resources.path(“乌尔都语”、“词干化子”)作为词干分析器的util路径:
打开(词干分析器util\u路径)作为词干分析器util\u文件:
stemmer\u util\u code=stemmer\u util\u file.read()
exec(词干分析器\实用程序\代码,词干分析器直到.\指令\代码)
运行此代码后,您可以像导入一样使用
stemerutil
模块,但安装程序包的任何人都看不到它,除非他们也运行此代码


但正如我所说,如果您只想与用户交流您的包的哪一部分是公共API,那么第一个解决方案是非常可取的。

您所说的“不可访问”是什么意思?是否希望通过
urdu.stemerutil.*
安装库的用户无法访问其中定义的函数/类/名称,或者你的意思是文件本身不可能导航到用户的文件系统并在其上进行更新?非常感谢-这正是我想要的for@MishaalNaeem很高兴我能帮忙-祝你的项目好运=)