我已经在Windows 10 PC上创建了一个conda虚拟环境以用于项目。根据{{3}}
中提到的最佳实践,要安装所需的软件包和依赖项,我使用的是conda install <package>
而不是pip install <package>
。
为了分发我的软件,我选择创建分别针对conda和非conda用户的environment.yml和requirements.txt文件。我能够将当前的虚拟环境导出到yml文件中,因此可以照顾conda用户。但是,为了使非conda用户能够复制相同的环境,我需要创建并共享requirements.txt文件。可以使用conda list --export > requirements.txt
创建此文件,但是此格式与pip不兼容,其他用户不能在其系统上使用pip install -r requirements.txt
。
使用pip freeze > requiremens.txt
是提到的https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#using-pip-in-an-environment和here的解决方案。这意味着非conda用户可以在虚拟环境中简单地执行pip install -r requirements.txt
,他们可以在没有conda的情况下使用virtualenv创建虚拟环境。
但是,如果您以上述样式生成了requiremets.txt文件,则最终将得到带有符号链接的requirements.txt文件。这是因为我们试图为使用conda install
而不是pip install
安装的软件包创建requirements.txt文件。
例如,我以类似方式生成的requirements.txt文件如下所示。
certifi==2020.6.20
cycler==0.10.0
kiwisolver==1.2.0
matplotlib @ file:///C:/ci/matplotlib-base_1603355780617/work
mkl-fft==1.2.0
mkl-random==1.1.1
mkl-service==2.3.0
numpy @ file:///C:/ci/numpy_and_numpy_base_1596215850360/work
olefile==0.46
pandas @ file:///C:/ci/pandas_1602083338010/work
Pillow @ file:///C:/ci/pillow_1602770972588/work
pyparsing==2.4.7
python-dateutil==2.8.1
pytz==2020.1
sip==4.19.13
six==1.15.0
tornado==6.0.4
wincertstore==0.2
使用此文件安装依赖项时,这些符号链接将导致错误。
我采取的步骤使我进入了上面的requirements.txt文件:
conda create -n myenv python=3.8
conda activate myenv
激活了新创建的conda虚拟环境conda install pip
conda intall pandas
conda install matplotlib
pip freeze > requirements.txt
生成了与pip兼容的requrements.txt文件所以,我的问题是,您如何坚持使用conda install
而不是pip install
的最佳实践,同时仍然能够将软件包分发给conda和非conda用户?
答案 0 :(得分:0)
我为上述找到的最佳解决方案是下面将要描述的组合。对于0 transworld system inc trying colect debt mine ...
1 complaint cals ocur betwen cel job
2 company violated
3 previously requested experian actualy mine ins...
4 company trans union noticed
dtype: object
,我首先将环境列表导出为conda
,然后省略软件包的内部版本号,这通常会使在另一个OS上重现环境变得很困难:
environment.yml
输出:
conda env export > environment.yml --no-builds
对于name: myenv
channels:
- defaults
- conda-forge
dependencies:
- blas=1.0
- ca-certificates=2020.10.14
- certifi=2020.6.20
...
,您在上面描述的内容显然是最新版本的pip中的well-known issue。获得“干净” pip
文件的解决方法是这样导出:
requirements.txt
输出:
pip list --format=freeze > requirements.txt
请注意,certifi==2020.6.20
cycler==0.10.0
kiwisolver==1.2.0
matplotlib==3.3.2
mkl-fft==1.2.0
...
和pip
之间的上述区别不同,这很可能是因为conda
比conda
更通用,并且不仅包括Python软件包。>
我个人发现,分发软件包时,通过检查代码(所需输入的内容是什么)来确定所需的最小软件包及其版本可能更为简洁,而不是盲目导出完整的{ {1}}或pip
列表,这些列表可能最终(偶然地或不是偶然地)包括使用该软件包并非真正必要的软件包。