在我的虚拟环境中工作,任何未在虚拟环境中解析的导入调用都将在"原始"环境中解析。 与此同时, 根据 https://docs.python.org/3/tutorial/modules.html#intra-package-references,允许相对引用。 我担心这可能会导致与进入或尝试进入程序执行的相同命名对象的不同版本混淆/冲突。 我是 Python 的新手,我相信这个问题在文档中有介绍,但我找不到它。 有什么指示吗?
更新 5/13/2017 - 我找到了以下适用于 python 3.6.1 的文档:https://docs.python.org/3/library/venv.html#creating-virtual-environments
在 Windows 上,按如下方式调用 venv 命令:
c:>c:Python35python -m venv c:pathtomyenv
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip] ENV_DIR [ENV_DIR ...]
--system-site-packages: Give the virtual environment access to the system site-packages dir.
默认设置是无权访问系统站点包目录。 因此,我推测系统站点包目录之外的任何代码在使用相对导入路径方面都被认为是"足够安全"的,并且用户有责任不与这些项目发生冲突。
这不是一个大问题,尝试使用 pyenv,您将能够拥有一个独立的 python 版本,如果任何导入调用未解析,它将搜索您用于创建 virtualenv 的特定 python(由 pyenv 安装)的路径,而不是 sys python 路径。
- 安装 pyenv
- 安装特定的 Python 版本
- 使用Pyenv安装的特定Python版本来设置您的虚拟版本。
检查 Python 代码的解析路径
import sys
print(sys.path)
列表中的目录将代表 Python 搜索您的路径的顺序。