【问题标题】:virtual environment - can import package without having it installed in my venv虚拟环境 - 无需在我的 venv 中安装即可导入包
【发布时间】:2021-05-15 23:04:17
【问题描述】:

我在 Raspberry Pi 的 ubuntu 中的 python 中创建了一个虚拟环境:

python -m venv ./venv/myname

这给了我文件夹结构:

   myFolder
        +-- venv
        +-- myApplication.py

我正在激活正在运行的虚拟环境:

source venv/myname/bin/activate

我不明白的是我在跑步的时候

python myApplication.py

我可以使用全局安装但不能在我的虚拟环境中安装的 python 包运行应用程序。例如,我可以import numpy 无需将其安装在我的虚拟环境中,而是全局安装。我认为我需要在我的虚拟环境中安装所有东西,无论我是否在全球范围内都有它。我在这里误解了什么吗?

我正在使用 python 3.7 这是我来自print(sys.path)的输出

>>> import sys
>>> print(sys.path)
['', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/home/pi/.local/lib/python3.7/site-packages', '/usr/local/lib/python3.7/dist-packages', '/usr/local/lib/python3.7/dist-packages/Adafruit_PCA9685-1.0.1-py3.7.egg', '/usr/lib/python3/dist-packages']
>>> 

更新 使用os.environ['VIRTUAL_ENV'] 对其进行测试后,虚拟环境似乎正在运行。很奇怪,我可以运行我没有在我的虚拟环境中安装的包。这是我的终端的输出:

(myenv) pi@raspberrypi:~/Desktop/myproject/myenv$ python
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['VIRTUAL_ENV']
'/home/pi/Desktop/myproject/myenv'
>>> exit()
(myenv) pi@raspberrypi:~/Desktop/myproject/myenv$ deactivate
pi@raspberrypi:~/Desktop/myproject/myenv$ pythonPython 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['VIRTUAL_ENV']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.7/os.py", line 678, in __getitem__
    raise KeyError(key) from None
KeyError: 'VIRTUAL_ENV'
>>>

【问题讨论】:

  • 使用which python 和import sys; print(sys.path()) 的结果更新您的问题
  • 完成!我用结果更新了我的第一篇文章
  • 了解您正在运行的命令的顺序会很有用。可以加个trace吗?
  • 命令的顺序?你的意思是我按什么顺序执行不同的任务?除了 sudo pip install virtualenv
  • 在我的第一篇文章中查看更新

标签: python virtual-environment


【解决方案1】:

我很清楚您的虚拟环境 (venv) 尚未激活(有关验证方法,请参阅此SO post)。

您可以通过运行./venv/myname/bin/python myApplication.py 在不激活的情况下运行您的程序。但是,您可能不想每次都使用它,因为它很冗长。

运行source 后没有激活您的venv 可能有很多系统特定的原因。我的建议是先重新安装 virtualenv,删除你的 venv,然后重新创建。

【讨论】:

  • 这似乎是正确的。验证通过检查地址:pip -V 我重新安装了 virtualenv 并重新创建了 venv,但不幸的是这并没有改变任何东西。
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多