2017-03-07 70 views
0

如果我創建在Ubuntu 16.04(Python2)一個virtualenv中,那麼目錄local被創建包含符號鏈接:Ubuntu上的virtualenv符號鏈接local/lib - > ../lib?

===> 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發行版發生。

這個符號鏈接爲什麼創建?

更新

在此plattform openSUSE 42.1 (x86_64)從lib64的一個符號鏈接的lib被創建...

我不明白這個符號連接的需要。

+0

想知道如果我們可以以某種方式推斷,從http://stackoverflow.com/questions/8227120/strange-local-folder-inside-virtualenv-folder – nir0s

+0

@ nir0s我不跑五歲的virtualenv :-)我使用15.0.3版。我在SuSE linux上使用相同的virtualenv版本,並且沒有創建符號鏈接。不過謝謝你看我的問題。 – guettli

回答

0

所以,刺探virtualenv中的代碼只是一點點後,似乎會發生以下情況:

create_environment電話install_python這就要求fix_local_schemehttps://github.com/pypa/virtualenv/blob/master/virtualenv.py#L1492)。 注意如何在文檔字符串他們的狀態,這是需要POSIX系統如Ubuntu與Python 2.7(你正在運行的)

>>> 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,以瞭解更多信息。

+0

感謝您提供此信息。現在我看到了符號鏈接的創建位置......只留下一個問題:爲什麼需要這個? – guettli