【问题标题】:virtualenv on Ubuntu symlink local/lib -> ../lib?Ubuntu 符号链接 local/lib -> ../lib 上的 virtualenv?
【发布时间】:2017-03-07 13:25:23
【问题描述】:

如果我在 Ubuntu 16.04 (Python2) 上创建一个 virtualenv,则会创建一个包含符号链接的目录 local

===> virtualenv symlinktest
New python executable in /home/tguettler/tmp/symlinktest/bin/python
Please make sure you remove any previous custom paths from your /home/tguettler/.pydistutils.cfg file.
Installing setuptools, pip, wheel...done.



===> ls -l symlinktest/local/



===> ls -l symlinktest/local/*
lrwxrwxrwx 1 tguettler tguettler 35 Mär  7 14:21 symlinktest/local/bin -> /home/tguettler/tmp/symlinktest/bin
lrwxrwxrwx 1 tguettler tguettler 39 Mär  7 14:21 symlinktest/local/include -> /home/tguettler/tmp/symlinktest/include
lrwxrwxrwx 1 tguettler tguettler 35 Mär  7 14:21 symlinktest/local/lib -> /home/tguettler/tmp/symlinktest/lib


===> virtualenv --version
15.0.3

这在其他 linux 发行版上不会发生。

为什么以及在哪里创建这个符号链接?

更新

在这个平台上openSUSE 42.1 (x86_64) 创建了一个从 lib64 到 lib 的符号链接 ...

我不明白这个符号链接的必要性。

【问题讨论】:

  • 想知道我们是否可以从stackoverflow.com/questions/8227120/…中推断出这一点
  • @nir0s 我没有运行五年前的 virtualenv :-) 我使用的是 15.0.3 版本。我在 SuSE linux 上使用相同的 virtualenv 版本,并且没有创建符号链接。不过,感谢您查看我的问题。

标签: ubuntu virtualenv


【解决方案1】:

所以,在稍微窥探了 virtualenv 代码之后,似乎发生了以下情况:

create_environment 调用 install_python,后者调用 fix_local_scheme (https://github.com/pypa/virtualenv/blob/master/virtualenv.py#L1492)。 请注意他们在文档字符串中如何声明这是 posix 系统(如带有 Python 2.7(您正在运行)的 Ubuntu)所需要的

>>> import platform
>>> platform.linux_distribution()
('Ubuntu', '16.04', 'xenial')

$ python2.7
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> sysconfig._get_default_scheme()
'posix_local'


$ cat /usr/lib/python2.7/sysconfig.py
def _get_default_scheme():
    if os.name == 'posix':
        # the default scheme for posix on Debian/Ubuntu is posix_local
        # FIXME: return dist-packages/posix_prefix only for
        #   is_default_prefix and 'PYTHONUSERBASE' not in os.environ and 'real_prefix' not in sys.__dict__
        # is_default_prefix = not prefix or os.path.normpath(prefix) in ('/usr', '/usr/local')
        return 'posix_local'
    return os.name

您还可以阅读不同前缀的说明:https://pymotw.com/2/sysconfig/#installation-paths,了解更多信息。

【讨论】:

  • 感谢您提供此信息。现在我看到了符号链接是在哪里创建的......只剩下一个问题:为什么需要这个?
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2011-11-18
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2014-10-01
相关资源
最近更新 更多