Python的教条是,应该使用virtualenv将相同软件包的不同版本分开。在大多数其他编程环境中,这不是问题。例如,在linux中,各种不同版本的动态库都可以在/usr/lib64中共存,加载程序可以为二进制文件选择合适的库
Python确实提供了一种只获取所需版本的机制。因此,我一直试图在一个地方保留多个python包版本。这意味着包需要像这样包装才能加载正确的版本:
python3
__requires__ = ['scipy <1.3.0,>=1.2.0', 'anndata <0.6.20', 'loompy <3.0.0,>=2.00', 'h5py <2.10', ]
import pkg_resources
import scipy
print(scipy.__version__)
import anndata
print(anndata.__version__)
import loompy
print(loompy.__version__)
import h5py
print(h5py.__version__)
import scanpy
print(scanpy.__version__)
quit()
#emits
python3
Python 3.6.8 (default, Nov 21 2019, 19:31:34)
[GCC 8.3.1 20190507 (Red Hat 8.3.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> __requires__ = ['scipy <1.3.0,>=1.2.0', 'anndata <0.6.20', 'loompy <3.0.0,>=2.00', 'h5py <2.10']
>>> import pkg_resources
>>> import scipy
>>> print(scipy.__version__)
1.2.3
>>> import anndata
/home/common/lib/python3.6/site-packages/anndata-0.6.19-py3.6.egg/anndata/base.py:17: FutureWarning: pandas.core.index is deprecated and will be removed in a future version. The public classes are available in the top-level namespace.
from pandas.core.index import RangeIndex
>>> print(anndata.__version__)
0.6.19
>>> import loompy
>>> print(loompy.__version__)
2.0.17
>>> import h5py
>>> print(h5py.__version__)
2.9.0
>>> import scanpy
>>> print(scanpy.__version__)
1.4.3
到目前为止还不错。但是,如果requires行更改为:
__requires__ = ['scipy <1.3.0,>=1.2.0', 'anndata <0.6.20', 'loompy <3.0.0,>=2.00', 'h5py <2.10', 'scanpy <1.4.4,>=1.4.2']
然后它就完全崩溃了。运行的开始变为:
python3
Python 3.6.8 (default, Nov 21 2019, 19:31:34)
[GCC 8.3.1 20190507 (Red Hat 8.3.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> __requires__ = ['scipy <1.3.0,>=1.2.0', 'anndata <0.6.20', 'loompy <3.0.0,>=2.00', 'h5py <2.10', 'scanpy <1.4.4,>=1.4.2']
>>> import pkg_resources
Traceback (most recent call last):
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 584, in _build_master
ws.require(__requires__)
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 901, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 792, in resolve
raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.VersionConflict: (scanpy 1.5.1 (/home/common/lib/python3.6/site-packages), Requirement.parse('scanpy<1.4.4,>=1.4.2'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3261, in <module>
@_call_aside
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3245, in _call_aside
f(*args, **kwargs)
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 3274, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 586, in _build_master
return cls._build_from_requirements(__requires__)
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 599, in _build_from_requirements
dists = ws.resolve(reqs, Environment())
File "/usr/common/lib/python3.6/site-packages/pkg_resources/__init__.py", line 792, in resolve
raise VersionConflict(dist, req).with_context(dependent_req)
pkg_resources.ContextualVersionConflict: (scipy 1.2.3 (/home/common/lib/python3.6/site-packages/scipy-1.2.3-py3.6-linux-x86_64.egg), Requirement.parse('scipy>=1.3.1'), {'umap-learn'})
>>> import scipy
>>> print(scipy.__version__)
1.4.1
# and numerous other issues
这是非常奇怪的,因为当scanpy没有设置限制时,加载了所需的版本,但是当设置了一个限制时,它在1.5.1上被阻塞了
为什么额外的约束会破坏一切
存在的这些软件包的版本是
anndata
anndata-0.6.19.dist-info
anndata-0.6.19-py3.6.egg
anndata-0.7.1.dist-info
anndata-0.7.3.dist-info
scipy
scipy-1.2.3.dist-info
scipy-1.2.3-py3.6-linux-x86_64.egg
scipy-1.4.1.dist-info
loompy
loompy-2.0.17.dist-info
loompy-2.0.17-py3.6.egg
loompy-3.0.6.dist-info
h5py
h5py-2.10.0.dist-info
h5py-2.9.0.dist-info
h5py-2.9.0-py3.6-linux-x86_64.egg
scanpy
scanpy-1.4.3.dist-info
scanpy-1.4.3-py3.6.egg
scanpy-1.4.6.dist-info
scanpy-1.5.1.dist-info
scanpy-1.5.2.dev7+ge33a2f33-py3.6.egg
这实际上是在CentOS上,不是红帽,但这可能无关紧要
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐