簡體   English   中英

帶有install_requires的setup.py開發會將dist-packages放在virtualenv的sys.path頂部

[英]`setup.py develop` with `install_requires` puts `dist-packages` at top of `sys.path` in virtualenv

我有一個目錄~/foo ,它只有setup.py ,其中包含:

from setuptools import setup, find_packages
setup(
    name='foo',
    version='0.1',
    packages=find_packages(),
    install_requires=['mock']
)

現在,我使用以下方法創建虛擬環境:

cd ~
virtualenv --system-site-packages v1

然后做~/v1/bin/python -c "import sys; print sys.path" ,我得到

['',
 '/home/garrett',
 '/home/garrett/v1/lib/python2.7',
 '/home/garrett/v1/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/garrett/v1/lib/python2.7/lib-tk',
 '/home/garrett/v1/lib/python2.7/lib-old',
 '/home/garrett/v1/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/garrett/v1/local/lib/python2.7/site-packages',
 '/home/garrett/v1/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

但是,當我這樣做

sudo pip install mock
cd ~/foo
~/v1/bin/python setup.py develop

然后,setuptools將我的virtualenv的sys.path更改為在頂部附近有dist-packagesmock所在的地方)。 即, sys.path的前3個條目變為:

['',
 '/usr/local/lib/python2.7/dist-packages',
 '/home/garrett/foo',
 ...

通過查看修改easy-install.pth 的源代碼 ,這似乎是有意的。

無論如何,有沒有禁用它,使dist-packagessys.path的位置混亂? 我的dist-packages目錄中有其他模塊,這些模塊被賦予了不必要的優先級。

不確定這是否是最佳解決方案,但是阻止setuptools賦予dist_packages更高優先級的一種方法是添加--always-copy標志。

~/v1/bin/python setup.py develop --always-copy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM