虚拟环境中的 Conda ModuleNotFoundError
Conda ModuleNotFoundError in a virtual environment
显然有很多类似的问题,但我不得不再次问同样的问题,因为我无法从其他问题(也没有通过合理搜索的任何其他地方)找到解决方案(有效)。
另请注意,我刚刚开始 Python。
我也觉得有必要解释一下我目前拥有的一切。所以...很抱歉 post
主要问题
我有一个遗留的 Python 项目,我需要在本地开始工作(在 Ubuntu 20.04 上)。此项目有 environment.yml 和 requirements.txt 个文件。
创建了一个虚拟环境:
conda env create -f environment.yml
这将创建虚拟环境,我可以激活它并看到它已安装 'flask'。
conda list |grep flask
>> flask 1.1.2 pypi_0 pypi
pip list |grep Flask
>> flask 1.1.2 pypi_0 pypi
但是当我尝试 运行 应用程序时,出现错误:
ModuleNotFoundError: No module named 'flask'
一开始 'flask' 的版本实际上是 conda 的 1.1.2 和 pip 的 1.1.1,但我在某些时候将它们更改为相同的(不过同样的错误,尝试了其他几个版本也是如此)。
主要问题:我doing/having哪里错了?
我所拥有的和我尝试过的
我尝试在创建环境后通过 requirements.txt 进行 pip 安装。我在虚拟环境内外都这样做了。
pip install -r requirements.txt
但这会导致很多错误,因为找不到库,所以我认为它可能已经过时(或者只是不适用于我当前的环境)。我知道它应该代表为应用程序工作的环境安装的库。 (我的猜测是,这最初是从应用程序 运行 的容器中获取的?)
我确实找到了一个有效的解决方案。我用 apt:
手动安装了烧瓶(以及之后的其他几个库)
sudo apt install python3-flask
然而,这显然不是正确的解决方案,因为库应该只存在于虚拟环境中 (afaik)。此外,这似乎与 pip 一起工作过一次(也许与 anaconda 一起......不知道了。无法让它再次发生。)。
我想我可以手动将这些要求写入一个新的“requirments_local.txt”,如果我可以再次使用 pip 安装,我可以使用它,但我认为这是错误的(为什么要有 environment.yml 和一个要求-文件?)。 (environment.yml 也有 pip 库要安装)
我不认为这很重要,但写下来以防万一。
该应用程序通过两个 bash 脚本启动,其中第一个脚本设置一些 运行 时间设置,然后调用另一个脚本(entrypoint.sh 也被容器使用)最终有这个启动实际应用程序的行:
exec gunicorn -b 0.0.0.0:5000 myapp:app
(似乎没问题,因为应用程序在 docker 容器中启动,甚至在“全局”安装依赖项时在本地启动)
在调用第二个脚本之前激活虚拟环境,方法是在脚本中加入这一行:
source activate $env_name
我正在使用 source,因为我注意到 'conda activate $env_name' 不起作用。我通过在两个脚本的不同阶段执行 'conda env list > conda.txt' 检查是否使用了正确的环境。
我使用 Ubuntu 20.04 并安装了这些:
- Python 2.7.18 (Python)
- Python 3.8.10 (Python3)
- 点子 20.0.2 来自 /usr/lib/python3/dist-packages/pip (python 3.8)
- pip3 给出相同的
- conda 4.10.3(通过安装miniconda)
我也尝试过使用 anaconda 而不是 miniconda 因为 [=104 中似乎存在一些依赖关系=]指向anaconda,但是烧瓶的错误是一样的。
其他问题:我可以从版本控制中省略 requirements.txt 还是可以以某种方式与 environment.yml?在两个文件中列出库版本感觉不对。已经创建虚拟环境时,这些要求的目的是什么?
虽然@razimbres 的建议实际上并不正确,但它给了我一个想法,让我思考为什么在虚拟环境中找不到库的原因。 (可能有什么东西可以指示应用程序在环境之外寻找库)
我通过 apt 安装了绿色独角兽,因为缺少它是最初启动应用程序时的第一个错误。
exec gunicorn -b 0.0.0.0:5000 myapp:app
./entrypoint.sh: line 62: exec: gunicorn: not found
因为它在 environment.yml 中丢失并且不知道更好,我通过 apt 安装它(因为它有没有...虽然现在有人可以解释为什么?它显然只是把事情搞砸了。)。
我向 environment.yml 添加了以下 (conda) 依赖项:
- 枪炮==20.1.0
然后再次创建环境:
conda env remove --name $env_name
conda env create -f environment.yml
现在可以了。 (甚至从脚本开始)
我认为教训是:不要使用 apt 安装任何 python 资源。
还有。如果有的话,请卸载通过 apt 安装的所有 python 资源。就像我的情况一样:
sudo apt remove gunicorn
Ps。此外,似乎不需要 requirements.txt 。也许它可以被删除(稍后)。感觉目前只是造成混乱。
显然有很多类似的问题,但我不得不再次问同样的问题,因为我无法从其他问题(也没有通过合理搜索的任何其他地方)找到解决方案(有效)。
另请注意,我刚刚开始 Python。
我也觉得有必要解释一下我目前拥有的一切。所以...很抱歉 post
主要问题
我有一个遗留的 Python 项目,我需要在本地开始工作(在 Ubuntu 20.04 上)。此项目有 environment.yml 和 requirements.txt 个文件。
创建了一个虚拟环境:
conda env create -f environment.yml
这将创建虚拟环境,我可以激活它并看到它已安装 'flask'。
conda list |grep flask
>> flask 1.1.2 pypi_0 pypi
pip list |grep Flask
>> flask 1.1.2 pypi_0 pypi
但是当我尝试 运行 应用程序时,出现错误:
ModuleNotFoundError: No module named 'flask'
一开始 'flask' 的版本实际上是 conda 的 1.1.2 和 pip 的 1.1.1,但我在某些时候将它们更改为相同的(不过同样的错误,尝试了其他几个版本也是如此)。
主要问题:我doing/having哪里错了?
我所拥有的和我尝试过的
我尝试在创建环境后通过 requirements.txt 进行 pip 安装。我在虚拟环境内外都这样做了。
pip install -r requirements.txt
但这会导致很多错误,因为找不到库,所以我认为它可能已经过时(或者只是不适用于我当前的环境)。我知道它应该代表为应用程序工作的环境安装的库。 (我的猜测是,这最初是从应用程序 运行 的容器中获取的?)
我确实找到了一个有效的解决方案。我用 apt:
手动安装了烧瓶(以及之后的其他几个库)sudo apt install python3-flask
然而,这显然不是正确的解决方案,因为库应该只存在于虚拟环境中 (afaik)。此外,这似乎与 pip 一起工作过一次(也许与 anaconda 一起......不知道了。无法让它再次发生。)。 我想我可以手动将这些要求写入一个新的“requirments_local.txt”,如果我可以再次使用 pip 安装,我可以使用它,但我认为这是错误的(为什么要有 environment.yml 和一个要求-文件?)。 (environment.yml 也有 pip 库要安装)
我不认为这很重要,但写下来以防万一。
该应用程序通过两个 bash 脚本启动,其中第一个脚本设置一些 运行 时间设置,然后调用另一个脚本(entrypoint.sh 也被容器使用)最终有这个启动实际应用程序的行:
exec gunicorn -b 0.0.0.0:5000 myapp:app
(似乎没问题,因为应用程序在 docker 容器中启动,甚至在“全局”安装依赖项时在本地启动) 在调用第二个脚本之前激活虚拟环境,方法是在脚本中加入这一行:
source activate $env_name
我正在使用 source,因为我注意到 'conda activate $env_name' 不起作用。我通过在两个脚本的不同阶段执行 'conda env list > conda.txt' 检查是否使用了正确的环境。
我使用 Ubuntu 20.04 并安装了这些:
- Python 2.7.18 (Python)
- Python 3.8.10 (Python3)
- 点子 20.0.2 来自 /usr/lib/python3/dist-packages/pip (python 3.8)
- pip3 给出相同的
- conda 4.10.3(通过安装miniconda)
我也尝试过使用 anaconda 而不是 miniconda 因为 [=104 中似乎存在一些依赖关系=]指向anaconda,但是烧瓶的错误是一样的。
其他问题:我可以从版本控制中省略 requirements.txt 还是可以以某种方式与 environment.yml?在两个文件中列出库版本感觉不对。已经创建虚拟环境时,这些要求的目的是什么?
虽然@razimbres 的建议实际上并不正确,但它给了我一个想法,让我思考为什么在虚拟环境中找不到库的原因。 (可能有什么东西可以指示应用程序在环境之外寻找库)
我通过 apt 安装了绿色独角兽,因为缺少它是最初启动应用程序时的第一个错误。
exec gunicorn -b 0.0.0.0:5000 myapp:app
./entrypoint.sh: line 62: exec: gunicorn: not found
因为它在 environment.yml 中丢失并且不知道更好,我通过 apt 安装它(因为它有没有...虽然现在有人可以解释为什么?它显然只是把事情搞砸了。)。
我向 environment.yml 添加了以下 (conda) 依赖项:
- 枪炮==20.1.0
然后再次创建环境:
conda env remove --name $env_name
conda env create -f environment.yml
现在可以了。 (甚至从脚本开始)
我认为教训是:不要使用 apt 安装任何 python 资源。
还有。如果有的话,请卸载通过 apt 安装的所有 python 资源。就像我的情况一样:
sudo apt remove gunicorn
Ps。此外,似乎不需要 requirements.txt 。也许它可以被删除(稍后)。感觉目前只是造成混乱。