注意:Python2
的话用pip
安装,Python3
用pip3
安装(总之要知道安装在哪里,有的系统将python
软连接到Python3
上了)
pip install scipy \
pandas \
numpy \
scikit-image \
scikit-learn \
matplotlib \
pandas \
tqdm \
Pillow
Anaconda
虚拟环境中首先激活虚拟环境,然后用conda
安装依赖包:
conda install jupyter notebook \
scipy \
pandas \
numpy \
scikit-image \
cikit-learn \
matplotlib \
pandas \
tqdm \
Pillow
DGX-ONE服务器下安装:
apt-get install scipy
apt-get install numpy
apt-get install python-skimage(install skimage)
(pspnet): install matio
我们做开发时为何需要对依赖库进行管理?当依赖类库过多时,如何管理类库的版本?
Python
提供通过requirements.txt
文件来进行项目中依赖的三方库进行整体安装导入。
首先看一下requirements.txt
的格式:
requests==1.2.0
Flask==0.10.1
Python安装依赖库使用pip可以很方便的安装,如果我们需要迁移一个项目,那我们就需要导出项目中依赖的所有三方类库的版本、名称等信息。
接下来就看Python项目如何根据requirements.txt
文件来安装三方类库
使用pip freeze
生成requirements.txt
pip freeze > requirements.txt
pip freeze
命令输出的格式和requirements.txt
文件内容格式完全一样,因此我们可以将pip freeze
的内容输出到文件requirements.txt
中。在其他机器上可以根据导出的requirements.txt
进行包安装。
注意:pip freeze
输出的是本地环境中所有三方包信息,但是会比pip list
少几个包,因为pip,wheel,setuptools
等包,是自带的而无法(un)install
的,如果要显示所有包可以加上参数-all
,即pip freeze -all
。
使用pipreqs
生成requirements.txt
首先先安装pipreqs
:
pip install pipreqs
使用pipreqs
生成requirements.txt
:
pipreqs ./
注意:pipreqs生成指定目录下的依赖类库
上面两个方法的区别?
使用pip freeze
保存的是当前Python环境下所有的类库,如果你没有用virtualenv
来对Python
环境做虚拟化的话,类库就会很杂很多,在对项目进行迁移的时候我们只需关注项目中使用的类库,没有必要导出所有安装过的类库,因此我们一般迁移项目不会使用pipreqs
,pip freeze
更加适合迁移整个python环境下安装过的类库时使用。(不知道virtualenv
是什么或者不会使用它的可以查看:《构建Python
多个虚拟环境来进行不同版本开发之神器-virtualenv》)。
使用pipreqs
它会根据当前目录下的项目的依赖来导出三方类库,因此常用与项目的迁移中。
这就是pip freeze、pipreqs的区别,前者是导出Python环境下所有安装的类库,后者导出项目中使用的类库。
如果要安装requirements.txt
中的类库内容,那么你可以执行:
pip install -r requirements.txt
$ pip3 --version
Traceback (most recent call last):
File "/usr/bin/pip3", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2708, in <module>
working_set.require(__requires__)
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 686, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python3/dist-packages/pkg_resources.py", line 584, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==1.5.6
解决方法
sudo python3 get-pip.py
sudo python3 ez_setup.py
其中get-pip.py和ez_setup.py文件在src/fix_pip
文件夹中。
Error checking for conflicts.
Traceback (most recent call last):
File "/home/andy/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2584, in version
return self._version
File "/home/andy/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2691, in __getattr__
raise AttributeError(attr)
AttributeError: _version
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/andy/.local/lib/python3.5/site-packages/pip/_internal/commands/install.py", line 503, in _warn_about_conflicts
package_set, _dep_info = check_install_conflicts(to_install)
File "/home/andy/.local/lib/python3.5/site-packages/pip/_internal/operations/check.py", line 108, in check_install_conflicts
package_set, _ = create_package_set_from_installed()
File "/home/andy/.local/lib/python3.5/site-packages/pip/_internal/operations/check.py", line 47, in create_package_set_from_installed
package_set[name] = PackageDetails(dist.version, dist.requires())
File "/home/andy/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2589, in version
raise ValueError(tmpl % self.PKG_INFO, self)
ValueError: ("Missing 'Version:' header and/or METADATA file", Unknown [unknown version] (/home/andy/.local/lib/python3.5/site-packages))
解决方法
运行以下代码,查看site-packages
下的文件夹, 删除以 -
开头的文件夹:
python3 -c "import site; print(site.getsitepackages())"
到报错文件夹下(这里是/home/andy/.local/lib/python3.5/site-packages
)删除 -
开头的文件夹,然后重新执行 pip3 list
.
我这里是 -pencv_python-3.4.3.18.dist-info
:
rm -rf ./-pencv_python-3.4.3.18.dist-info
然后 pip3 list
正常了.