我的python项目在conda虚拟环境中运行。我使用conda install
在环境中安装软件包,只要该软件包可以通过这种方式安装,否则,我使用pip install
安装它。
为了便于其他开发人员安装项目,我将conda环境中使用的包列表导出到一个文件:conda env export
但是,从一段时间以来,包导出不再包含pip安装的包。
如何使pip包再次出现在导出中?
我的conda导出文件,因为它是几个星期前:
name: sensor_gateway
channels:
- defaults
dependencies:
- aiohttp=2.3.9=py36_0
- async-timeout=2.0.0=py36hc3e01a3_0
- certifi=2018.1.18=py36_0
- chardet=3.0.4=py36h420ce6e_1
- jinja2=2.10=py36h292fed1_0
- markupsafe=1.0=py36h0e26971_1
- multidict=3.3.2=py36h72bac45_0
- pip=9.0.1=py36h226ae91_4
- pymysql=0.7.11=py36hf59f3ba_0
- python=3.6.4=h6538335_1
- pytz=2018.3=py36_0
- setuptools=38.4.0=py36_0
- sqlalchemy=1.2.1=py36hfa6e2cd_0
- vc=14=h0510ff6_3
- vs2015_runtime=14.0.25123=3
- wheel=0.30.0=py36h6c3ec14_1
- wincertstore=0.2=py36h7fe50ca_0
- yarl=0.14.2=py36h27d1bf2_0
- pip:
- aiohttp-jinja2==0.16.0
- aiomysql==0.0.12
- attrs==17.4.0
- idna==2.6
- idna-ssl==1.0.0
- python-mimeparse==1.6.0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway
康达出口现在:
name: sensor_gateway
channels:
- defaults
dependencies:
- aiohttp=2.3.9=py36_0
- async-timeout=2.0.0=py36hc3e01a3_0
- certifi=2018.4.16=py36_0
- chardet=3.0.4=py36h420ce6e_1
- icc_rt=2017.0.4=h97af966_0
- intel-openmp=2018.0.0=8
- jinja2=2.10=py36h292fed1_0
- markupsafe=1.0=py36h0e26971_1
- mkl=2018.0.2=1
- mkl_fft=1.0.1=py36h452e1ab_0
- mkl_random=1.0.1=py36h9258bd6_0
- multidict=3.3.2=py36h72bac45_0
- numpy=1.14.2=py36h5c71026_1
- pip=9.0.1=py36h226ae91_4
- pymysql=0.7.11=py36hf59f3ba_0
- python=3.6.4=h6538335_1
- pytz=2018.3=py36_0
- setuptools=38.4.0=py36_0
- simplejson=3.14.0=py36hfa6e2cd_0
- sqlalchemy=1.2.1=py36hfa6e2cd_0
- vc=14=h0510ff6_3
- vs2015_runtime=14.0.25123=3
- wheel=0.30.0=py36h6c3ec14_1
- wincertstore=0.2=py36h7fe50ca_0
- yarl=0.14.2=py36h27d1bf2_0
prefix: C:\ProgramData\Anaconda3\envs\sensor_gateway
我怀疑更新conda的版本(4.4.10-py36_0
--
更新:
目前唯一提出的答案与这个问题有关,但似乎并不能解决我的问题:
1.在Windows命令终端上,以管理员身份打开:
where-pip
输出(where
作为与unix/linux上的which
相当的windows命令):
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe
pip冻结
输出:
列出我在“普通”python上安装过的所有软件包(=默认情况下安装的所有软件包,不在任何专用虚拟环境中)。包列表太长,无法包含在此处。
2.在以管理员权限打开的Windows命令终端上,执行后激活sensor_gateway
:
其中pip
输出:
C:\ProgramData\Anaconda3\envs\sensor_gateway\Scripts\pip.exe
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe
pip冻结
输出:
正确列出在我的环境中使用pip安装的所有软件包。
因此,当我的虚拟环境被激活时,该环境中安装了一个pip,并且必须是该pip在被要求时返回已安装包的列表,而不是另一个pip安装,因为环境上的pip包列表是正确的。
我只需在具有管理员权限的命令窗口中运行此命令即可解决此问题:
activate <env-name>
conda update pip
之后,在我的环境中导出可用的包,再次包含用conda安装的包和用pip安装的包。
我怀疑我可能导致了这个包导出问题,因为我在执行包安装时遵循了pip之前给出的指令:
"您使用的是pip版本9.0.3,但版本10.0.1可用。您应该考虑通过'python-m pip安装-升级pip'进行升级
因此,使用python-mpip安装更新--upgrade-pip
破坏了我的包导出,但是conda-update-pip
修复了它。
对我来说,这只是使用conda软件包PIP18.1_py36_0出现的(没有尝试任何其他版本)。因此,我通过via将虚拟环境中的pip降级为版本10
conda install pip=10
在此之后,导出再次列出pip包。
还请参阅此condahttps://github.com/conda/conda/pull/7612的拉取请求,它修复了conda 4.6.2的问题。它也被反向移植到conda 4.5.10。目前没有conda 4.4. x后端端口。
在写这篇文章的时候,由于anaconda读取pip列表的问题,conda导出命令只导出通过conda安装Packagename
安装的包,忽略pip包。
您可以尝试通过conda安装
重新安装您的包,看看它是否正确地生成environment.yml文件。