我必须创建虚拟环境并将其移动到某个远程服务器。 为此,我创建了一个环境,但其中不包含默认的python包(如json和日志记录)。
导入某些软件包时出现错误: 追溯(最近一次通话): 文件“”,第1行,位于 ModuleNotFoundError:没有名为“ json”的模块
您可以看到json来自默认路径而不是虚拟环境
source venv3/bin/activate
(venv3) [user1@nn1 ~]$ python
Python 3.7.4 (default, Dec 12 2019, 12:03:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import json
>>> print(json.__file__)
/usr/local/lib/python3.7/json/__init__.py
>>> import influxdb
>>> print(influxdb.__file__)
/home/user1/venv3/lib/python3.7/site-packages/influxdb/__init__.py
答案 0 :(得分:2)
Virtualenv在服务器之间不可移动。您是否将virtualenv移至新服务器?如果是这样,我认为最方便的是在远程服务器上重新创建它。
答案 1 :(得分:1)
虚拟环境使用绝对路径(例如,从环境变量中获取);您可以在the documentation或PEP 405中找到更多信息。因此,即使将venv移到另一个目录,它也很可能不再起作用。 Venvs不应四处走动。相反,无论您在何处复制项目,都必须重新创建venv。
如果您使用poetry或pipenv之类的库,或者仅使用一个requirements.txt文件,则可以大大简化重新创建venv的过程。
答案 2 :(得分:0)
Virtualenv确实具有默认软件包。如果没有,那么您将在import语句本身上得到错误。不在其他命令上。