- 此问题在此处已有答案**:
Copy complete virtualenv to another pc(5个答案)
昨天关门了。
我在机器#1上创建了一个虚拟环境myenv1
。
我在这个虚拟环境中安装了一些软件包。pip3 freeze
显示了这个软件包列表:
cffi==1.15.1
chardet==5.0.0
click==8.0.4
cryptography==39.0.0
dataclasses==0.8
distlib==0.3.6
dnspython==2.2.1
filelock==3.4.1
Flask==2.0.3
future==0.18.2
impacket==0.10.0
importlib-metadata==4.8.3
importlib-resources==5.4.0
itsdangerous==2.0.1
Jinja2==3.0.3
ldap3==2.9.1
ldapdomaindump==0.9.4
MarkupSafe==2.0.1
natsort==8.2.0
platformdirs==2.4.0
pyasn1==0.4.8
pycparser==2.21
pycryptodomex==3.16.0
pyOpenSSL==23.0.0
six==1.16.0
typing_extensions==4.1.1
virtualenv==20.17.1
Werkzeug==2.0.3
zipp==3.6.0
我归档了文件夹myenv1
并将其复制到机器#2(与机器#1相同)。
在2号机器上,我激活了myenv1
。pip3 freeze
显示了相同的包列表,所以看起来传输成功通过了。
但是当我运行一些需要这些包的代码时,我看到的是ModuleNotFoundError: No module named 'impacket
,所以Python看不到安装的包。
当我选中sys.path
时,我看到虚拟环境myenv1
的文件夹:
python3 -c "import sys; print('\n'.join(sys.path))"
/usr/lib64/python36.zip
/usr/lib64/python3.6
/usr/lib64/python3.6/lib-dynload
/opt/allot/igor_test/myenv1/lib64/python3.6/site-packages
/opt/allot/igor_test/myenv1/lib/python3.6/site-packages
为什么虚拟环境看不到自己的包?如何使这些包可见?
- 统一采购司**
我发现问题了。
这是我运行的脚本:
#!/usr/bin/python3
import argparse
import re
import sys
import configparser
import io
from impacket.dcerpc.v5.rpcrt import RPC_C_AUTHN_LEVEL_PKT_INTEGRITY, RPC_C_AUTHN_GSS_NEGOTIATE
from natsort import natsorted, ns
from impacket.dcerpc.v5.dtypes import NULL
from impacket.dcerpc.v5.dcom import wmi
from impacket.dcerpc.v5.dcomrt import DCOMConnection
... //and all the code further
这个脚本指向#!/usr/bin/python3
,这是一个全局Python。全局Python看不到来自虚拟环境的包。
我用我的虚拟环境中的python替换了这一行:#!/path/to/my/virt_env/myenv1/bin/python3
一切都开始运转了。
1条答案
按热度按时间xtfmy6hx1#
您可以在第一台计算机上使用
pip3 freeze
来创建项目的requirements.txt
(pip3 freeze > requirements.txt
)。在第二台机器上,创建另一个虚拟环境并运行
pip3 install -r requirements.txt
,以便将第一台机器上安装的依赖项安装到它们应该安装的确切版本上。