我的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
康茄达出口现在:
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
作为unix / linux上which
的windows-equivalent命令):
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,它必须是那个 pip,它会在被要求时返回已安装软件包的列表,而不是另一个pip安装,因为环境中的pip包列表是正确的。
答案 0 :(得分:5)
我能够通过在具有管理员权限的命令窗口中运行它来解决此问题:
activate <env-name>
conda update pip
之后,我环境中可用软件包的导出再次包含使用conda安装的软件包和带有pip的软件包。
我怀疑我可能导致了这个包导出问题,因为我在执行包安装时遵循了先前pip给出的指令:
&#34;您正在使用pip版本9.0.3,但版本10.0.1可用。 你应该考虑通过&python -m pip install升级 - 升级pip&#39; &GT;命令&#34;
因此使用python -m pip install --upgrade pip
进行更新会破坏我的包导出,但conda update pip
已修复它。
答案 1 :(得分:3)
对我来说,这仅是使用conda软件包pip 18.1_py36_0出现的(请尝试其他任何版本)。 因此,我通过
将虚拟环境中的点降低到了版本10。conda install pip=10
此后,导出再次列出了pip包。
另请参阅此对conda 的请求,它解决了conda 4.6.2的问题。它还被移植到conda 4.5.10。当前没有conda 4.4.x反向端口。
答案 2 :(得分:1)
在撰写本文时,由于anaconda读取点列表存在问题,因此conda export命令仅导出通过conda install packagename
安装的软件包,而忽略了这些点。
您可以尝试通过conda install
重新安装软件包,看看它是否正确生成了environment.yml文件。
答案 3 :(得分:0)
如果您已将pip
与anaconda
一起安装并用它来安装软件包,那么conda-env
会自动执行此操作。
所以基本上你可以用
导出你的环境 conda env export -n <env-name> > environment.yml
否则
请参阅此link