Relative import doesn't work : ImportError: attempted relative import with no known parent package
Relative import doesn't work : ImportError: attempted relative import with no known parent package
这是文件:
parent_directory:
parent_directory/ecommerce:
parent_directory/ecommerce/付款:
我想做的是在 products.py 中使用相对导入来导入 database.py。我知道我可以写 import database
但我想学习相对导入。我还尝试从顶级目录 parent_directory 导入 main.py,但这也不起作用,所以我想我会尝试做最简单的相对导入,那就是,从同一包中导入文件。
这是 parent_directory/ecommerce 中 products.py 的代码:
from .database import Database
class Product:
pass
这是 parent_directory/ecommerce 中 database.py 文件中的代码:
if __name__ == "__main__":
import products
x = products.Product()
class Database:
pass
print("file : {0:<35} || name : {1:<20} || package : {2:<20}".format(
str(__file__).split("\")[-1],
str(__name__),
str(__package__),
))
我尝试了几种方法,例如:
- 使用-m 执行products.py 就像
python -m products.py
- 正在创建一个 py venv
- 在文件中添加 all 和 package。
这是我的 init.py 文件,来自 parent_directory/ecommerce:
__all__ = ["database", "products"]
__package__ = "ecommerce"
无论我做什么,我总是得到这个错误:ImportError: attempted relative import with no known parent package
。我知道以前有人问过这个问题。我已经尝试了很多东西,但没有任何效果。你知道如何解决这个问题吗?
我找到了一种从父目录导入文件的方法,因为使用绝对导入很容易从子包中导入它们。
# inside parent_directory/ecommerce/products.py trying to import parent_directory/main.py
import sys
import os
current_file = os.path.realpath(__file__)
current_dir_ecommerce = os.path.dirname(current_file)
parent_dir_parent_directory = os.path.dirname(current_dir_ecommerce)
sys.path.insert(0, parent_dir_parent_directory)
import main # works
我刚刚将父目录添加到 sys.path。
我找到了解决问题的方法。
我必须在包外并使用 -m 而不是使用 / 发送路径,我必须使用 .而是这样:
python -m parent_directory.ecommerce.products
这将解决问题,但我必须在顶级包外执行此行(在我的例子中,顶级包是parent_directory)。
# Inside products.py
from .database import Database # works
from ..main import SomeRandomClass # works
class Product:
pass
这是文件:
parent_directory:
parent_directory/ecommerce:
parent_directory/ecommerce/付款:
我想做的是在 products.py 中使用相对导入来导入 database.py。我知道我可以写 import database
但我想学习相对导入。我还尝试从顶级目录 parent_directory 导入 main.py,但这也不起作用,所以我想我会尝试做最简单的相对导入,那就是,从同一包中导入文件。
这是 parent_directory/ecommerce 中 products.py 的代码:
from .database import Database
class Product:
pass
这是 parent_directory/ecommerce 中 database.py 文件中的代码:
if __name__ == "__main__":
import products
x = products.Product()
class Database:
pass
print("file : {0:<35} || name : {1:<20} || package : {2:<20}".format(
str(__file__).split("\")[-1],
str(__name__),
str(__package__),
))
我尝试了几种方法,例如:
- 使用-m 执行products.py 就像
python -m products.py
- 正在创建一个 py venv
- 在文件中添加 all 和 package。
这是我的 init.py 文件,来自 parent_directory/ecommerce:
__all__ = ["database", "products"]
__package__ = "ecommerce"
无论我做什么,我总是得到这个错误:ImportError: attempted relative import with no known parent package
。我知道以前有人问过这个问题。我已经尝试了很多东西,但没有任何效果。你知道如何解决这个问题吗?
我找到了一种从父目录导入文件的方法,因为使用绝对导入很容易从子包中导入它们。
# inside parent_directory/ecommerce/products.py trying to import parent_directory/main.py
import sys
import os
current_file = os.path.realpath(__file__)
current_dir_ecommerce = os.path.dirname(current_file)
parent_dir_parent_directory = os.path.dirname(current_dir_ecommerce)
sys.path.insert(0, parent_dir_parent_directory)
import main # works
我刚刚将父目录添加到 sys.path。
我找到了解决问题的方法。 我必须在包外并使用 -m 而不是使用 / 发送路径,我必须使用 .而是这样:
python -m parent_directory.ecommerce.products
这将解决问题,但我必须在顶级包外执行此行(在我的例子中,顶级包是parent_directory)。
# Inside products.py
from .database import Database # works
from ..main import SomeRandomClass # works
class Product:
pass