首页 > 解决方案 > Python 项目不会根据 sys.path 顺序获取依赖项

问题描述

我正在使用 pip 和 python 2.7 来升级我的项目中的依赖项。全局 python 具有较低版本的依赖项,我正在使用 --user 选项运行 pip install 以避免弄乱全局 sdks。

pip install --user -r requirements.txt在目录中运行命令workspace/myproject。这个目录也是我PYTHONUSERBASE 的项目使用升级版失败退出。这是python -m site命令的结果

sys.path = [
'workspace/myproject',
'/usr/local/lib/python2.7/site-packages/pip-9.0.1- 
py2.7.egg',
'/usr/local/lib/python27.zip',
'/usr/local/lib/python2.7',
'/usr/local/lib/python2.7/plat-linux2',
'/usr/local/lib/python2.7/lib-tk',
'/usr/local/lib/python2.7/lib-old',
'/usr/local/lib/python2.7/lib-dynload',
'workspace/myproject/_pip/lib/python2.7/site- 
 packages',
'/usr/local/lib/python2.7/site-packages',
]
USER_BASE: 'workspace/myproject/_pip' (exists)
USER_SITE: 'workspace/myproject/_pip/lib/python2.7/site-packages' 
(exists)
ENABLE_USER_SITE: True

pip -V命令:pip 9.0.1 from /usr/local/lib/python2.7/site-packages/pip-9.0.1-py2.7.egg (python 2.7)

如您所见,我的用户站点位于全局站点包位置之上。当我导航到用户站点目录时,我可以看到最新版本的所有类和模块。命令 pip list --user 还显示了我想要的版本。尽管如此,当我运行该项目时,仍会从全局站点包位置拾取较旧的依赖项。我使用__file__变量来确定导入模块的完整路径,它显示

'/usr/local/lib/python2.7/site-packages' 

但是,当我使用 --ignore-installed 选项运行 pip install 时,一切都按预期运行。sys.path 具有相同的输出,但__file__变量现在显示 user_site 目录的路径。我承认我是 python 和 pip 的新手,但根据我对 sys.path、python 导入和 user_site 文档的理解,这不是预期的行为。有没有人遇到过类似的事情?我对 pip 如何与 --user 选项一起工作有错误的理解吗?对此的任何输入都会有所帮助。

谢谢!

标签: pythonpython-2.7pipdependencies

解决方案


推荐阅读