首页 > 解决方案 > 运行解释器时导入某些模块时出错

问题描述

基本数据:

❯ python --version
Python 3.8.2

我有一个带有一些模块的 Python 项目。我使用venv,通常我从头开始这样做:

❯ deactivate; rm -rf .venv && python -m venv .venv && source .venv/bin/activate && pip install --upgrade pip wheel setuptools --no-cache-dir # re-create venv

并安装我的包:

❯ pip install . --no-cache-dir

我的 setup.py 文件包含以下内容:

...
# dependencies
    install_requires=[
        "Flask==1.1.2",
        "marshmallow-sqlalchemy==0.22.3",
        "gunicorn==20.0.4"
    ],
...

所有命令都正确执行。

但是当我执行我的 Flask 程序(有或没有gunicorn)时,我得到这个错误:

...
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
ModuleNotFoundError: No module named 'marshmallow_sqlalchemy'
...

这对我来说没有意义,因为看看这些命令。1. pip 不会说谎:

❯ pip list
Package                Version
---------------------- -------
click                  7.1.2
Flask                  1.1.2
my-package             0.0.1
gunicorn               20.0.4
itsdangerous           1.1.0
Jinja2                 2.11.2
MarkupSafe             1.1.1
marshmallow            3.5.2
marshmallow-sqlalchemy 0.22.3
pip                    20.1
setuptools             46.1.3
SQLAlchemy             1.3.16
Werkzeug               1.0.1
wheel                  0.34.2

这对我来说是一个彻底的杀戮......这个直接解释器命令没有给出任何错误:

❯ python -c "from marshmallow_sqlalchemy import SQLAlchemyAutoSchema"

我究竟做错了什么?

标签: pythonpython-3.xpipsetuptools

解决方案


感谢您的所有评论,这迫使我进行更多调查!我找到了解释。关于pythonpip二进制文件的一切都可以:

❯ which python
{project_folder}/.venv/bin/python
❯ which pip
{project_folder}/.venv/bin/pip

但是flask变量gunicorn不会:

❯ which gunicorn
{HOME}/.pyenv/shims/gunicorn
❯ which flask
{HOME}/.pyenv/shims/flask

这里需要说明一下,我使用pyenv来控制我的 Python 版本。

这么说,我可以使用明确的venv二进制文件正确执行我的应用程序,flask并且gunicorn.

无论如何,我想了解为什么pyenv不使用正确的venv二进制文件...


推荐阅读