我在Windows 10上创建了一个conda虚拟环境来开展项目工作。为了安装所需的软件包和依赖项,我使用conda install <package>
而不是pip install <package>
,这符合最佳实践。
为了发布我的软件,我选择创建一个environment.yml和一个requirements.txt文件,以针对conda用户和非conda用户。我能够将当前虚拟环境导出为yml文件,因此可以满足conda用户的需求。但是,为了让非conda用户能够复制相同的环境,我需要创建并共享requirements.txt文件。这个文件可以使用conda list --export > requirements.txt
创建,但这种格式与pip不兼容,其他用户无法在其系统上使用pip install -r requirements.txt
。
使用pip freeze > requiremens.txt
是这里和这里提到的解决方案。这意味着非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 虚拟环境 - 使用
conda activate myenv
激活了新创建的 conda 虚拟环境 - 使用
conda install pip
安装了 pip - 使用
conda install pandas
安装了 pandas - 使用
conda install matplotlib
安装了 matplotlib - 使用
pip freeze > requirements.txt
生成了一个兼容 pip 的 requirements.txt 文件
所以,我的问题是如何遵循使用 conda install
而不是 pip install
的最佳实践,同时仍能将软件包分发给 conda 和非 conda 用户?