Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_Python Import_Relative Import - Fatal编程技术网

Python 模块之间的相对导入

Python 模块之间的相对导入,python,python-import,relative-import,Python,Python Import,Relative Import,我编写了一组用于计算的函数,并将它们组织在一些.py文件中,比如functions1.py和functions2.py。在同一文件夹中,我还有另一个文件main.py,然后: 假设我有以下代码: import numpy as np def mycos(x): return np.cos(x) def mysin(x): return np.sin(x) 而在functions2.py中: 现在假设main.py包含: 然后,如果执行main.py,则会出现以下错误: T

我编写了一组用于计算的函数,并将它们组织在一些.py文件中,比如functions1.py和functions2.py。在同一文件夹中,我还有另一个文件main.py,然后:

假设我有以下代码:

import numpy as np

def mycos(x): 
    return np.cos(x)

def mysin(x):
    return np.sin(x)
而在functions2.py中:

现在假设main.py包含:

然后,如果执行main.py,则会出现以下错误:

Traceback (most recent call last):
  File "functions2.py", line 6, in <module>
    from .functions1 import mysin, mycos
ImportError: attempted relative import with no known parent package

在使用相对导入时,我遗漏了什么吗?

我认为这是因为当您运行未在项目目录中执行的代码时,请尝试在main.py的代码开头添加这几行

导入操作系统如果已经导入操作系统,则不添加此行 os.chdiros.path.dirnameos.path.abspath\uu文件__ 让我知道这是否有效,如果无效。。。你能分享完整的代码来更好地理解你的问题吗

编辑 问题应该是文件functions1.py和functions2.py实际上不是模块,为了解决这个问题,我将向您推荐两种解决方案: 创建文件夹 由于这两个函数文件不是作为一个模块,所以创建一个文件夹并将它们像这样放在其中 代码是这样的

main.py

import numpy as np
from functions.functions2 import mytan

angle = np.pi/3
if mytan(angle) == np.tan(angle):
    print('OK')
函数1.py

import numpy as np

def mycos(x):
    return np.cos(x)

def mysin(x):
    return np.sin(x)
函数2.py

from .functions1 import mysin, mycos

def mytan(x):
    return mysin(x)/mycos(x)
使用uuu init_uuuuu.py 这就是代码 init.py

以及所有其他文件,就像第一个解决方案一样 请注意,此解决方案有点长,但这应该是最正确的方法

然后? 如果你想更好地理解为什么它不起作用,我建议你阅读这篇文章:
Cheers J.Bloom我认为这是因为当您运行未在项目目录中执行的代码时,请尝试在main.py代码的开头添加这几行代码

导入操作系统如果已经导入操作系统,则不添加此行 os.chdiros.path.dirnameos.path.abspath\uu文件__ 让我知道这是否有效,如果无效。。。你能分享完整的代码来更好地理解你的问题吗

编辑 问题应该是文件functions1.py和functions2.py实际上不是模块,为了解决这个问题,我将向您推荐两种解决方案: 创建文件夹 由于这两个函数文件不是作为一个模块,所以创建一个文件夹并将它们像这样放在其中 代码是这样的

main.py

import numpy as np
from functions.functions2 import mytan

angle = np.pi/3
if mytan(angle) == np.tan(angle):
    print('OK')
函数1.py

import numpy as np

def mycos(x):
    return np.cos(x)

def mysin(x):
    return np.sin(x)
函数2.py

from .functions1 import mysin, mycos

def mytan(x):
    return mysin(x)/mycos(x)
使用uuu init_uuuuu.py 这就是代码 init.py

以及所有其他文件,就像第一个解决方案一样 请注意,此解决方案有点长,但这应该是最正确的方法

然后? 如果你想更好地理解为什么它不起作用,我建议你阅读这篇文章: Cheers J.Bloomos.chdiros.path.dirnameos.path.abspath\uu文件建议做的是将工作目录更改为main.py的父文件夹。这看起来很混乱,可能会以微妙的方式失败——相对路径就是其中之一。正确的解决方案是使用根目录的父目录中的-m开关运行main.py。这实际上是运行python脚本的推荐方式。因此,您应该运行:

$ python -m root.main # from parent dir of root
然后,模块main作为根包的一部分运行,根包在您的案例中缺少父包

注意:如果您创建一个子包根,这仍然有效。函数,如上所述-最新py3不需要添加_init _uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。这看起来很混乱,可能会以微妙的方式失败——相对路径就是其中之一。正确的解决方案是使用根目录的父目录中的-m开关运行main.py。这实际上是运行python脚本的推荐方式。因此,您应该运行:

$ python -m root.main # from parent dir of root
然后,模块main作为根包的一部分运行,根包在您的案例中缺少父包


注意:如果您创建一个子包根,这仍然有效。函数,如上所述-最新的py3不需要添加_init _uuuuuuuuuuy.py,但为了清晰起见,添加它是一个好主意。

谢谢,我已经修改了这个问题,希望现在问题更清楚。无论如何,我已经验证了运行是在正确的文件夹中执行的。好的,如果不是问题,我将把这个解决方案留在这里,因为在大多数类似的情况下,它应该是有效的。谢谢,我已经修改了这个问题,希望它现在更清楚。无论如何,我已经验证了运行是否在正确的文件夹中执行。好的,如果没有问题,我将把这个解决方案留在这里,因为在大多数类似情况下,它应该是workRelative import已经有很多答案了:,等等@andrew-94我没有收到任何反馈:我的回答解决了你的问题吗?这与python中相对导入的工作方式有关。有关解决方案,请参阅。这是否回答了您的问题?相对导入已经有很多答案:,,等等@andrew-94我没有收到任何反馈:我的答案解决了你的问题吗?它与相对导入在python中的工作方式有关。请参阅以获取解决方案。请执行以下操作: 这能回答你的问题吗?
import functions1, functions2
$ python -m root.main # from parent dir of root