如何使用 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 中使用我的脚本,它们都使用我的结构。只有当我尝试从我的虚拟机中的命令行 运行 它们时,它们才不起作用。
如果有人想向我解释其中的区别以及我的导入的确切问题是什么,请随意。
我有一个问题,我认为它有一个简单的答案,但出于某种原因,我很难自己找到它。我已经使用 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 中使用我的脚本,它们都使用我的结构。只有当我尝试从我的虚拟机中的命令行 运行 它们时,它们才不起作用。
如果有人想向我解释其中的区别以及我的导入的确切问题是什么,请随意。