如何使用 virtualenv 和 pip 从本地存储库导入模块

how to import modules from local repository with virtualenv and pip

我有一个问题,我认为它有一个简单的答案,但出于某种原因,我很难自己找到它。我已经使用 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

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

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

python -m script_name 

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

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

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

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

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