【问题标题】:Packages not visible after venv added添加 venv 后包不可见
【发布时间】:2022-01-15 15:00:57
【问题描述】:

我已将.venv 安装到我的python 项目中。我已经激活它,然后根据要求安装:

python -m venv .ven
.\.ven\Scripts\activate
pip3 install -r requirements.txt

当我运行pip3 list 时,我看到所有软件包都已安装。然而,当我尝试运行我的应用程序时,我看到:

Traceback (most recent call last):
  File "d:/Projekty/_Python/therobertseye/app.py", line 1, in <module>
    from website import create_app
  File "d:\Projekty\_Python\therobertseye\website\__init__.py", line 1, in <module>
    from flask import Flask
ModuleNotFoundError: No module named 'flask'

在我的 _init.py 中:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
from flask_login import LoginManager

但它不仅是Flask - 当我出于测试目的删除时:

from flask import Flask

然后当我再次运行时,我看到了:

Traceback (most recent call last):
  File "d:/Projekty/_Python/therobertseye/app.py", line 1, in <module>
    from website import create_app
  File "d:\Projekty\_Python\therobertseye\website\__init__.py", line 1, in <module>
    from flask_sqlalchemy import SQLAlchemy
ModuleNotFoundError: No module named 'flask_sqlalchemy'

意味着我的包裹都不可见。看起来 venv 中的库不可见?怎么解决?

我通过 python3.8.exe app.py 从 app.py 运行我的项目

app.py:

from website import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True) 

编辑: 正如 @np8 所述,这两个命令都适用于本地:

python app.py
.\.ven\Scripts\python.exe app.py

不过,当部署在 Azure 上时,我在日志中出现错误:

021-12-11T10:11:56.228062960Z     from website.Barcode import Barcode
2021-12-11T10:11:56.228068661Z   File "/tmp/8d9bc8c8ae34714/website/Barcode.py", line 2, in <module>
2021-12-11T10:11:56.228074361Z     import cv2
2021-12-11T10:11:56.228079661Z   File "/tmp/8d9bc8c8ae34714/antenv/lib/python3.8/site-packages/cv2/__init__.py", line 8, in <module>
2021-12-11T10:11:56.228085161Z     from .cv2 import *
2021-12-11T10:11:56.228090161Z ImportError: libGL.so.1: cannot open shared object file: No such file or directory
2021-12-11T10:11:56.228096061Z [2021-12-11 10:11:56 +0000] [41] [INFO] Worker exiting (pid: 41)
2021-12-11T10:11:56.497660146Z [2021-12-11 10:11:56 +0000] [39] [INFO] Shutting down: Master
2021-12-11T10:11:56.497793247Z [2021-12-11 10:11:56 +0000] [39] [INFO] Reason: Worker failed to boot.
/home/LogFiles/2021_12_11_10-30-0-5_docker.log 

【问题讨论】:

  • 你如何运行你的项目?在相同情况下运行项目之前激活venv?
  • @AliIrani 我运行我的项目运行 app.py - 请参阅我附上的主要帖子。 python3.8.exe app.py。 venv 似乎已激活,我在终端中看到它
  • 您能否将以下解决方案添加到您的代码中,以查看运行项目时安装了哪些软件包?在 app.py 文件中添加导入 create_app 的代码。 stackoverflow.com/a/23885252/10910984
  • import sys; print(sys.executable) 添加到您的 scipt 顶部,以查看您是否真的在使用 .ven 文件夹中的 python.exe。
  • @np8 它显示:C:\Users\Robert\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\python.exe 我该如何解决?

标签: python pip python-venv


【解决方案1】:

您使用的 python 可执行文件与虚拟环境中的不同。当您在 cmd 或 powershell 中键入 python3.8.exe 时,Windows 将尝试查找名为 python3.8.exe(*) 的可执行文件。它遍历文件夹列表,这些文件夹位于您的 Windows PATH 变量中。

虚拟环境的工作原理(部分)在于venv/Scripts 文件夹中会有一个python.exe。当您运行虚拟环境激活脚本时,Scripts 文件夹将添加到当前进程(cmd 或 powershell)的PATH。它被添加到 PATH 的 top 中,因此 venv 中的 python.exe 将是第一个被找到的。

现在,虚拟环境文件夹中显然没有python3.8.exe,而是python.exe。很可能只是在运行

python app.py

将起作用(当在 vurrent 进程中激活虚拟环境时)。如果没有,你可以使用

.\.ven\Scripts\python.exe app.py

即使不激活虚拟环境也将始终有效。

(*)附带说明:python3.8.exe 是特定于 Windows 的东西。它是一种名为python3.8.exe 的全局快捷方式,它将指向一个在特殊位置具有正确版本的python.exe,正如您所见。

【讨论】:

  • 是的,当我这样做时: .\venv\Scripts\python.exe .\app.py 然后工作(在本地)以及如果我运行 python .\app.py跨度>
  • 所以使用你的两个命令在本地工作,但是在我部署到 azure 后我看到错误(见主帖)发生了什么?
  • 您是在 Azure 上运行 Windows 还是 Linux 计算机?你试过用谷歌搜索你的 importerror 吗?似乎没有正确安装 OpenCV。参见,例如ImportError: libGL.so.1: cannot open shared object file: No such file or directory
  • scode 在发布时安装 linux 容器。是的,我之前检查了这个链接,甚至手动运行并将它安装在容器上,但没有帮助。
猜你喜欢
  • 2013-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2016-08-11
  • 1970-01-01
相关资源
最近更新 更多