在Python包的顶层看不到模块导入
考虑以下在Python包的顶层看不到模块导入,python,Python,考虑以下python包结构 working_directory/ -- test_run.py -- mypackge/ ---- __init__.py ---- file1.py ---- file2.py 比如说在file1.py中,我定义了一个函数,func1(),我还从numpy导入了一些函数,比如从numpy导入数组中导入了。现在我想从test\u run.py导入并使用mypackage,而不在名称空间中看到这些numpy函数。我想使用import mypackage as m
python
包结构
working_directory/
-- test_run.py
-- mypackge/
---- __init__.py
---- file1.py
---- file2.py
比如说在file1.py
中,我定义了一个函数,func1()
,我还从numpy导入了一些函数,比如从numpy导入数组中导入了。现在我想从test\u run.py
导入并使用mypackage
,而不在名称空间中看到这些numpy函数。我想使用import mypackage as mp导入它,请参见
mp.file1.func1()
mp.file2.func2()
etc
我不想看到mp.file1.array()
。我该怎么做呢?一种可能是使用下划线:
from numpy import array as _array.
虽然这并不禁止人们访问mp.file1.\u array
,但一般认为以下划线开头的变量是“私有的”
顺便说一句,在python中没有简单的方法禁止访问任何变量。(一种方法是使其成为类的属性,请参见:)一种可能是使用下划线:
from numpy import array as _array.
虽然这并不禁止人们访问mp.file1.\u array
,但一般认为以下划线开头的变量是“私有的”
顺便说一句,在python中没有简单的方法禁止访问任何变量。(一种方法是将其设置为类的属性,请参见:)如果不删除它,则不能执行此操作,但是file1
中的函数将无法访问它。我觉得这是一个XY问题。你为什么要这样做?你不能直接这样做。如果您想紧密地管理名称空间,您需要在file1
处创建一个存根文件,该存根文件只从file1x
导入您需要的内容,其中filex
是您当前的文件1,已重命名。如果您不想看到mp.file1.array()
,正确的解决方案是一开始就不要查找它,我想从“mypackage”以有组织的形式提供我的功能,如果我需要使用一些软件来实现它们,我不希望从外部访问这些功能,因为这是不必要的。。。那错了吗?原则上你没有错。然而,我认为这是一场不值得战斗的战斗。。。可以通过使用<代码>导入NoPy作为NP<代码>和<代码> NP.数组< /代码>来考虑尽可能干净。另外,您难道不希望用户只查找您在文档中解释的函数吗?如果不删除它,您就不能这样做,但是file1
中的函数将无法访问它。我觉得这是一个XY问题。你为什么要这样做?你不能直接这样做。如果您想紧密地管理名称空间,您需要在file1
处创建一个存根文件,该存根文件只从file1x
导入您需要的内容,其中filex
是您当前的文件1,已重命名。如果您不想看到mp.file1.array()
,正确的解决方案是一开始就不要查找它,我想从“mypackage”以有组织的形式提供我的功能,如果我需要使用一些软件来实现它们,我不希望从外部访问这些功能,因为这是不必要的。。。那错了吗?原则上你没有错。然而,我认为这是一场不值得战斗的战斗。。。可以通过使用<代码>导入NoPy作为NP<代码>和<代码> NP.数组< /代码>来考虑尽可能干净。另外,您不希望用户只查找您在文档中解释的函数吗?