python - virtualenv 从错误的目录导入包
问题描述
在最近的 sublime 更新破坏了与 Virtualenv sublime 包的兼容性后,我决定切换到 VSCode。
我创建了另一个文件夹,我从 github 克隆了我的代码并设置了 VScode 工作区。
简化的文件结构如下所示(mypackage_wdir 是我在 sublime 中用于项目的目录):
├── mypackage_wdir
│ ├── dev_env
│ ├── mypackage
│ ├── mypackage_project.sublime-project
│ └── mypackage_project.sublime-workspace
├── mypackage_wdir_vs
│ ├── mypackage
│ └── mypackage_VS_workspace.code-workspace
我去了mypackage_wdir_vs,通过以下方式创建了一个虚拟环境。
virtualenv env_3.7
然后我激活了虚拟环境。
env_3.7\Scripts\activate
我去了 mypackage_wdir_vs/mypackage 并将其安装在 env_3.7 中:
pip install --editable .
我得到以下输出。
Obtaining file:///C:/Users/Krzysztof/OneDrive/mypackage_wdir_vs/mypackage
Collecting dill
Using cached dill-0.3.4-py2.py3-none-any.whl (86 kB)
Collecting ezdxf
Using cached ezdxf-0.16.6-cp37-cp37m-win_amd64.whl (1.2 MB)
Collecting numpy
Using cached numpy-1.21.2-cp37-cp37m-win_amd64.whl (14.0 MB)
Collecting matplotlib
Using cached matplotlib-3.4.3-cp37-cp37m-win_amd64.whl (7.2 MB)
Collecting pyparsing>=2.0.1
Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting typing-extensions
Using cached typing_extensions-3.10.0.2-py3-none-any.whl (26 kB)
Collecting python-dateutil>=2.7
Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting kiwisolver>=1.0.1
Using cached kiwisolver-1.3.2-cp37-cp37m-win_amd64.whl (51 kB)
Collecting pillow>=6.2.0
Using cached Pillow-8.3.2-cp37-cp37m-win_amd64.whl (3.2 MB)
Collecting cycler>=0.10
Using cached cycler-0.10.0-py2.py3-none-any.whl (6.5 kB)
Collecting six
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, typing-extensions, python-dateutil, pyparsing, pillow, numpy, kiwisolver, cycler, matplotlib, ezdxf, dill, mypackage
Running setup.py develop for mypackage
Successfully installed cycler-0.10.0 dill-0.3.4 ezdxf-0.16.6 kiwisolver-1.3.2 matplotlib-3.4.3 numpy-1.21.2 pillow-8.3.2 mypackage-0.1.dev0 pyparsing-2.4.7 python-dateutil-2.8.2 six-1.16.0 typing-extensions-3.10.0.2
然后我在 vscode 中打开我的项目(工作区)并选择新创建的虚拟环境:
一切都应该正常工作,但是,我意识到当我在 VScode 中运行代码时,包是从天知道从哪里导入的,而不是从 C:\Users\Krzysztof\OneDrive\mypackage_wdir_vs\mypackage
我在测试文件中添加了以下几行,以查看它的来源:
import mypackage
print(mypackage.__file__)
我得到以下输出:
(env_37) PS C:\Users\Krzysztof\OneDrive\mypackage_wdir_vs> & c:/Users/Krzysztof/OneDrive/mypackage_wdir_vs/env_37/Scripts/python.exe c:/Users/Krzysztof/OneDrive/mypackage_wdir_vs/mypackage/mypackage/geometry/test/test_base.py
C:\Users\Krzysztof\OneDrive\mypackage_wdir\mypackage\mypackage\__init__.py
............................
----------------------------------------------------------------------
Ran 28 tests in 0.005s
OK
(env_37) PS C:\Users\Krzysztof\OneDrive\mypackage_wdir_vs>
mypackage_wdir\mypackage 是我以前在 sublime 中工作的旧文件夹。
如何让 virtualenv 或 vscode 从正确的文件夹中导入包(C:/Users/Krzysztof/OneDrive/mypackage_wdir_vs/mypackage 而不是 C:/Users/Krzysztof/OneDrive/mypackage_wdir/mypackage)?这里有什么问题?
文件结构为:
├── mypackage_wdir
│ ├── dev_env
│ ├── mypackage
│ ├── mypackage_project.sublime-project
│ └── mypackage_project.sublime-workspace
├── mypackage_wdir_vs
│ ├── env_3.7
│ ├── mypackage
│ └── mypackage_VS_workspace.code-workspace
我检查了 virtualenv 文件夹中的包和 C:\Users\Krzysztof\OneDrive\mypackage_wdir_vs\env_3.7\Lib\site-packages 中的 mypackage.egg-link 文件是正确的:
C:\Users\Krzysztof\OneDrive\mypackage_wdir_vs\mypackage
.
解决方案
推荐阅读
- google-sheets - 在电子表格中强制桌面视图
- omnet++ - 用于绘制和分析 OMNeT++ 仿真以及如何安装和使用它们的便捷工具
- python - 如何合并这两个数据框,同时保留原始数据框的索引?
- amazon-elastic-beanstalk - AWS EB EnvironmentHealth 监控组件
- c - 在 C 中检查字符串空终止符
- azure-devops - AzureDevops 上的 Terraform 出现错误:端点身份验证数据不存在
- python - 按钮不显示计时器
- regex - 正则表达式屏蔽除特定范围以外的所有电话号码
- data-structures - Redis Zset 定位记录
- r - R删除数据框中的重复项