python - Virtualenv myenv 不在 Ubuntu 18.04 上的 exFAT 硬盘上创建虚拟环境
问题描述
我正在使用 python 3.6 学习 Django。我使用 Ubuntu 18.04.2 LTS,这对我来说也是新的。我的点子版本是 9.0.1。我的问题是,当我尝试使用virtualenv myenv命令在我的外部 exFAT 驱动器上创建虚拟环境时,它给出了我在下面分享的错误。但是我可以使用相同的命令在桌面上创建虚拟环境。这个问题对我来说很奇怪。我无法解决问题。你们能帮帮我吗?提前致谢!
示例代码:错误
c@p:/media/c/2NDTB/testpro$ virtualenv myenv
Using base prefix '/usr'
Traceback (most recent call last):
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 417, in copyfile
os.symlink(os.path.realpath(src), dest)
OSError: [Errno 38] Function not implemented: '/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu' -> '/media/c/2NDTB/testpro/myenv/lib/python3.6/config-3.6m-x86_64-linux-gnu'
在处理上述异常的过程中,又出现了一个异常:
Traceback (most recent call last):
File "/home/c/.local/bin/virtualenv", line 11, in <module>
sys.exit(main())
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 831, in main
symlink=options.symlink,
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 1106, in create_environment
install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages=site_packages, clear=clear, symlink=symlink)
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 1390, in install_python
copy_required_files(stdlib_dir, lib_dir, symlink)
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 1300, in copy_required_files
copyfile(join(src_dir, fn), join(lib_dir, fn), symlink)
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 420, in copyfile
copy_file_or_folder(src, dest, symlink)
File "/home/c/.local/lib/python3.6/site-packages/virtualenv.py", line 398, in copy_file_or_folder
shutil.copytree(src, dest, symlink)
File "/usr/lib/python3.6/shutil.py", line 359, in copytree
raise Error(errors)
shutil.Error: [('/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.so', '/media/c/2NDTB/testpro/myenv/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.so', "[Errno 38] Function not implemented: '../../x86_64-linux-gnu/libpython3.6m.so.1' -> '/media/c/2NDTB/testpro/myenv/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.so'"), ('/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so', '/media/c/2NDTB/testpro/myenv/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so', "[Errno 38] Function not implemented: '../../x86_64-linux-gnu/libpython3.6m.so.1' -> '/media/c/2NDTB/testpro/myenv/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6.so'")]
解决方案
我在您尝试做的事情中看到了两个问题。第一个较小的问题是 FAT 没有实现符号链接,而 virtualenvs 默认使用符号链接到创建它们的那个版本的 python。您可以尝试virtualenv --always-copy
避免使用符号链接。
但是接下来你会遇到第二个更大的问题 你正试图在可移动驱动器上创建一个 virtualenv 以将其移植到某个地方。那是行不通的——virtualenvs 是不可重定位的。当您在不同的地方需要一个 virtualenv 时,您必须重新创建它。要将已安装包的列表从一个 virtualenv 复制到另一个 virtualenv,请在原始 virtualenv 中运行:
pip freeze >requirements.txt
然后将文件移动requirements.txt
到另一个地方,创建一个新的 virtualenv 并恢复包:
virtualenv venv2
source venv2/bin/activate
pip install -r requirements.txt
推荐阅读
- html - GetElementById 无法在 HTML 中为 VBA 找到下拉列表
- android - 简体中文和繁体中文xml在android中不起作用
- python - 使用 shtuil.copytree 将目录复制到相对路径中
- regex - Fail2ban 正则表达式不匹配(没有意义!)
- visual-studio - 注册值未正确更新
- android - 如果没有某些操作,如何使活动无法退出?
- flutter - 使按钮/小部件出现 X 天或从 Date_X 到 Date_Z 的特定时间段
- date - Google STT - 德语 - 完整数字日期未正确转录
- android - 谷歌地点自动完成错误:“意图包含地点,但不包含”
- php - 调整图像大小时降低质量