Virtualenv myenv 不会在 Ubuntu 18.04 上的 exFAT 硬盘驱动器上创建虚拟环境

Virtualenv myenv doesn't create virtual environment on exFAT hard drive on Ubuntu 18.04

我正在使用 python 3.6 学习 Django。我使用 Ubuntu 18.04.2 LTS,这对我来说也是新的。我的 pip 版本是 9.0.1。我的问题是当我尝试在我的外部 exFAT 驱动器上创建虚拟环境时使用 virtualenv myenv 命令它给出了我在下面分享的错误。但是我可以使用相同的命令在桌面上创建虚拟环境。这个问题对我来说很奇怪。我无法解决问题。你们能帮帮我吗?提前致谢!

示例代码:错误

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 中:

pip freeze >requirements.txt

然后将文件 requirements.txt 移动到另一个地方,创建一个新的 virtualenv 并恢复包:

virtualenv venv2
source venv2/bin/activate
pip install -r requirements.txt