在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.数组< /代码>来考虑尽可能干净。另外,您不希望用户只查找您在文档中解释的函数吗?