【发布时间】:2018-10-19 13:42:29
【问题描述】:
我的 python 项目在 conda 虚拟环境中运行。只要该软件包可用于以这种方式安装,我就使用conda install 在环境中安装软件包,否则,我使用pip install 安装它。
为了让其他开发人员更容易安装项目,我将在 conda 环境中使用的包列表导出到一个文件:conda env export > conda_environment_export.yml。
但是,有一段时间以来,包导出不再包含 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
conda 现在导出:
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 --> 4.5.2-py36_0) 可能导致此项目出现此问题。在另一个项目中,我遇到了同样的问题,但我更新了 pip (9.0.1-py36h226ae91_4 --> 10.0.1-py36_0)。即使回到那里的 pip 9.0.1 之后,问题仍然存在。我的怀疑正确吗?我该怎么做才能再次解决这个问题?
更新:
目前唯一建议的答案链接到this question,它似乎没有解决我的问题:
1.在 Windows 命令终端上,以管理员身份打开:
where pip 输出(where 作为 Windows 等效命令到 unix/linux 上的which):
C:\ProgramData\Anaconda3\Scripts\pip.exe
C:\Users\Sander\AppData\Local\Programs\Python\Python36\Scripts\pip.exe
pip freeze 输出:
列出我曾经在“普通”python 上安装的所有包(= 默认情况下安装的所有包,不在任何专用虚拟环境中)。软件包列表太长,无法在此处列出。
2。在 Windows 命令终端上,以管理员权限打开,并在执行 activate sensor_gateway 后:
where 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 freeze 输出:
正确列出在我的环境中使用 pip 安装的所有软件包。
所以看来,当我的虚拟环境被激活时,那个环境中安装了一个 pip,并且它必须是 that pip 在被要求时返回已安装包的列表,而不是另一个 pip安装,因为环境上的pip包列表是正确的。
【问题讨论】:
-
我想补充一点,我遇到了同样的问题,通过使用
conda update -n base -c defaults conda更新conda解决了这个问题。 -
只是想注意,如果您使用
--from-history,则不会包含 pip 包。在这种情况下,有些人可能会找到这篇文章。您想要做的是关注正在讨论的这个 GitHub 问题:github.com/conda/conda/issues/9628