【发布时间】:2022-01-20 15:18:28
【问题描述】:
当我在虚拟环境中运行我的代码时,我得到的输出与我在虚拟环境之外的容器中运行代码不同。相同的文件结构、相同的代码在 AB.py 中,以及相同的导入语句在 init.py 和 AB.py 文件中。有关更多详细信息,请参见图像。非常基本,但我不想知道为什么当父容器位于虚拟环境中时 python 无法识别我的模块之一。谢谢!
Container A
>AB.py
>>Package_A
>>>>__init__.py,
>>>>Module_A.py,
>>>>Module_B.py,
>>>>Module_C.py
Virtual Environment Container A
>AB.py
>>Package_A
>>>>__init__.py,
>>>>Module_A.py,
>>>>Module_B.py,
>>>>Module_B.py
[See image here] : https://i.stack.imgur.com/RJGpk.png
## Package AB.py
from Package_A import Mod_A, Mod_B, Mod_C
Module_A.Func_A()
Module_B.Func_B()
Module_C.Func_C()
## __init__.py
from a import func_a
from b import func_b
## Module_A.py
def Func_A():
print("how")
## Module_B.py
def Func_B():
print("are")
## Module_C.py
def Func_C():
print("you")
在容器中运行 AB.py 返回
how
are
you
在虚拟环境中运行 AB.py 返回
ModuleNotFoundError: No module named 'a'
【问题讨论】:
-
模块引用同文件名
from Module_A import Func_A,同函数引用函数名。 -
您的虚拟环境是否有
bin/子目录,您是否在shell 提示符下. bin/activate? (如果这解决了您的问题,我会发布它作为答案。) -
@scootermefecit 是的,虚拟环境有一个 bin 目录。此外,我确实通过进入 venv 目录并使用 source ./bin/activate 激活了我的 venv
-
@chickitychinachinesechicken 我以后会这样做。这个练习是我试图理解和锁定容器、包、模块术语的尝试。当我在 venv 中执行此练习时,我刚刚发现 python 返回了不同的结果。我花了 1-2 个小时试图弄清楚发生了什么。
标签: python python-3.x package containers virtualenv