Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从包中的同级模块导入,不允许更改模块文件?_Python - Fatal编程技术网

Python 如何从包中的同级模块导入,不允许更改模块文件?

Python 如何从包中的同级模块导入,不允许更改模块文件?,python,Python,下面给出了一个文件夹结构。文件a.py和b.py已生成且无法更改。文件b.py导入文件a.py。初始化文件为空,可以更改。使用my_程序包在b.py中获取错误: ModuleNotFoundError:没有名为“a”的模块 如何解决这个问题 __init_uuuuuuuuy.py: a、 py: b、 py: 测试: 德里克·伊登的回答对我有用。想用我使用的包init文件内容扩展它 my package\uuuuu init\uuuuuuuuuuy.py文件: 您正在尝试从导入。目录?a和b是由

下面给出了一个文件夹结构。文件a.py和b.py已生成且无法更改。文件b.py导入文件a.py。初始化文件为空,可以更改。使用my_程序包在b.py中获取错误:

ModuleNotFoundError:没有名为“a”的模块

如何解决这个问题

__init_uuuuuuuuy.py:

a、 py:

b、 py:

测试:


德里克·伊登的回答对我有用。想用我使用的包init文件内容扩展它

my package\uuuuu init\uuuuuuuuuuy.py文件:


您正在尝试从导入。目录?a和b是由外部工具生成的,在b中:导入a作为mega_Ay您的b.py文件有缺陷,因此您应该更改生成它的工具。或者将.py放在顶层,可能是在src中,而不是在您的包中,因为它不属于那里。@Blckknght文件是由gRPC生成的,它们代表微服务的访问接口,从我的观点来看,它们属于同一个包。那么,您的工具是否有配置它的方法呢?或者您可以编写一些自动化脚本来修改文件中的导入语句。但是如果你想让a生活在一个包中,那么导入a就是错误的。你也许可以让它与一些丑陋的黑客,但它将是混乱的,不值得它。在我看来,德里克只是说明了a从b的进口,我认为已经发生-无需更改?你应该试试他建议的__; init __; py.py更改,因为它们对我来说是个不错的选择。。试图从较高的层次说明a和b中已经发生的事情。只需修改init即可获得所需的行为。仅供参考-他的评论来自以前的版本,我编辑:
.
└── src
    ├── main.py
    └── my_package
        ├── a.py
        ├── b.py
        └── __init__.py
import sys
sys.path.extend(pkg_directory)
import a
import b
def hello():
    print('Hello')
import a
>>> import pkg
>>> pkg.a.hello()
Hello
>>> pkg.b.a.hello()
Hello
import sys
import os.path

this_pkg_path = os.path.dirname(__file__)
sys.path.append(this_pkg_path)

import a
import b