【问题标题】:how to import modules from local repository with virtualenv and pip如何使用 virtualenv 和 pip 从本地存储库导入模块
【发布时间】:2020-12-28 05:23:10
【问题描述】:

我有一个问题,我认为答案很简单,但由于某种原因,我很难自己找到它。我已经使用 virtualenv 创建并激活了一个虚拟环境,我正在尝试安装所有必要的包以创建一个 requirements.txt 文件。

例如,我有一个这样开头的 Python 文件:

import xml.etree.ElementTree as ET
from lib.project import Projector
from lib import writer
import os
import datetime
from datetime import timedelta
from datetime import datetime
import pprint

当我尝试从虚拟机运行此文件时,我收到以下错误:

Traceback (most recent call last):
  File "readMap.py", line 2, in <module>
    from lib.project import Projector
ModuleNotFoundError: No module named 'lib.project'

我的问题是我不确定为什么虚拟环境找不到project.py。我的目录结构是:

regiaoSul
         lib
            __init__.py
            arrival_conversion.py
            coord_conversion.py
            message_conversion.py
            project.py
            route_conversion.py
            stop_conversion.py
            wkt_parser.py
            writer.py
readMap.py
json_generator.py

【问题讨论】:

  • 运行命令pip list --local 是否能让您进一步了解虚拟环境中安装了哪些软件包?我假设您在虚拟环境中?
  • 感谢您的回复。是的,我在我的虚拟环境中。我已经编辑了原始帖子。
  • 您确定lib 包中有一个名为project 的模块吗?该错误表明不是。你检查过文档吗?
  • 在我的本地lib 目录中有一个名为project 的模块。我在想我无意中安装了不正确的lib 包。当我尝试使用其路径安装本地lib 目录时,我收到错误消息,因为它不包含setup.pypyproject.toml。我想我的问题可能是我的lib 目录不包含__init__.py
  • 这可能有助于显示目录结构。

标签: python module pip virtualenv


【解决方案1】:

感谢所有回复的人。我相信这个问题是某种依赖问题。在readMap.py 中,我从lib 导入了writer,在writer.py 中,我从project 导入了Projector。我将需要Projector 的函数从writer.py 移动到readMap.py,它起作用了。

我仍然不完全明白为什么这是一个问题。直到最近,我一直在 PyCharm 中运行我的脚本,它们都使用我的结构。只是当我尝试从虚拟机中的命令行运行它们时,它们才不起作用。

如果有人想向我解释区别以及我的导入的确切问题是什么,请随意。

【讨论】:

    【解决方案2】:

    第 2 行的导入意味着 lib 是一个模块,而不是“一个简单的存储库”。 我将尝试使用标志 -m 运行脚本。像这样 -

    python -m script_name 
    

    确保在使用 -m 标志运行时删除 .py 扩展名。

    另一个建议:你不需要在虚拟环境中安装 python 文件,它们不是一些外部库。它们只需要在您运行脚本时出现(具有相同的打包顺序)。

    【讨论】:

      【解决方案3】:

      我有时也会遇到同样的问题。一种解决方案是通过以下方式将路径添加到 sys.path: 导入系统 sys.path.insert(0, "/path/to/your/package_or_module")

      【讨论】:

      • 在我看来,修改sys.path应该是不得已的解决方案(修改PYTHONPATH也是避免)。
      猜你喜欢
      • 2019-08-25
      • 2021-08-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2019-03-11
      • 2020-04-27
      相关资源
      最近更新 更多