"conda env export" 中未包含 pip 包
pip packages not included in "conda env export"
我的 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
输出:
列出我在 'normal' 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 that returns的列表在要求时安装包,而不是另一个 pip 安装,因为环境中的 pip 包列表是正确的。
如果您使用 anaconda
安装了 pip
并使用它来安装软件包,那么 conda-env
会自动安装。
所以基本上您可以使用
导出您的环境
conda env export -n <env-name> > environment.yml
否则
请参考这个link
我能够通过 运行 在具有管理员权限的命令 window 中解决这个问题:
activate <env-name>
conda update pip
在那之后,我环境中可用包的导出再次包含使用 conda 安装的包和使用 pip 安装的包。
我怀疑我可能导致了这个包导出问题,因为我在执行包安装时遵循了 pip 之前给出的说明:
"You are using pip version 9.0.3, however version 10.0.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' > command."
所以用 python -m pip install --upgrade pip
更新破坏了我的包导出,但 conda update pip
修复了它。
在撰写本文时post,由于 anaconda 读取 pip 列表时出现问题,conda export 命令仅导出通过 conda install packagename
安装的包而忽略 pip 包。
您可以尝试通过 conda install
重新安装您的软件包,看看它是否正确生成 environment.yml 文件。
对我来说,这只出现在使用 conda 包 pip 18 时。1_py36_0(没有尝试任何其他版本)。
所以我通过
将虚拟环境中的 pip 降级到版本 10
conda install pip=10
在此之后导出再次列出 pip 包。
另请参阅 conda https://github.com/conda/conda/pull/7612 的此拉取请求,它修复了 conda 4.6.2 的问题。它还被反向移植到 conda 4.5.10。目前没有 conda 4.4.x backport.
我的 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
输出:
列出我在 'normal' 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 that returns的列表在要求时安装包,而不是另一个 pip 安装,因为环境中的 pip 包列表是正确的。
如果您使用 anaconda
安装了 pip
并使用它来安装软件包,那么 conda-env
会自动安装。
所以基本上您可以使用
导出您的环境conda env export -n <env-name> > environment.yml
否则
请参考这个link
我能够通过 运行 在具有管理员权限的命令 window 中解决这个问题:
activate <env-name>
conda update pip
在那之后,我环境中可用包的导出再次包含使用 conda 安装的包和使用 pip 安装的包。
我怀疑我可能导致了这个包导出问题,因为我在执行包安装时遵循了 pip 之前给出的说明:
"You are using pip version 9.0.3, however version 10.0.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' > command."
所以用 python -m pip install --upgrade pip
更新破坏了我的包导出,但 conda update pip
修复了它。
在撰写本文时post,由于 anaconda 读取 pip 列表时出现问题,conda export 命令仅导出通过 conda install packagename
安装的包而忽略 pip 包。
您可以尝试通过 conda install
重新安装您的软件包,看看它是否正确生成 environment.yml 文件。
对我来说,这只出现在使用 conda 包 pip 18 时。1_py36_0(没有尝试任何其他版本)。 所以我通过
将虚拟环境中的 pip 降级到版本 10conda install pip=10
在此之后导出再次列出 pip 包。
另请参阅 conda https://github.com/conda/conda/pull/7612 的此拉取请求,它修复了 conda 4.6.2 的问题。它还被反向移植到 conda 4.5.10。目前没有 conda 4.4.x backport.