如何从 anaconda 虚拟环境(而不是从基地)执行批处理脚本?



我想在Conda环境中运行批处理文件,而不是在基本环境中,而是在另一个虚拟环境中(这里是pylayers(。 我将activate.bat脚本从F:Anaconda3Scripts复制到F:Anaconda3envspylayersScripts.

我的批处理脚本(installer_win.bat(是:

call F:Anaconda3envspylayersScriptsactivate.bat
conda install numpy --yes
conda install mayavi --yes
conda install shapely --yes
conda install libgdal --yes
conda install gdal --yes
conda install h5py --yes
conda install seaborn --yes
conda install PIL --yes
conda install basemap --yes
conda install wxpython --yes
conda install netCDF4 --yes
pip install protobuf 
pip install tqdm
pip install descartes
pip install bitstring
pip install geocoder
pip install triangle
pip install osmapi
pip install pyshp 
pip install Image
pip install pathos
pip install SimPy==2.2
pip install simplekml
pip install smopy
python setup.py install

当我执行installer_win.bat文件时,它显示以下行为:

Output: #stops after executing very first line in the batch file.
(base) C:Usersmkdth>activate pylayers
(pylayers) C:Usersmkdth>cd /d F:PycharmProjectspylayers-master
(pylayers) F:PycharmProjectspylayers-master>installer_win.bat
(pylayers) F:PycharmProjectspylayers-master>call F:Anaconda3envspylayersScriptsactivate.bat
The system cannot find the path specified.
(pylayers) F:PycharmProjectspylayers-master>conda install numpy --yes
Collecting package metadata (current_repodata.json): done
Solving environment: done
## Package Plan ##
environment location: F:Anaconda3envspylayers
added / updated specs:
- numpy

The following packages will be downloaded:
package                    |            build
---------------------------|-----------------
openssl-1.1.1g             |       he774522_0         4.8 MB
------------------------------------------------------------
Total:         4.8 MB
The following NEW packages will be INSTALLED:
numpy-base         pkgs/main/win-64::numpy-base-1.18.1-py36hc3f5095_1
The following packages will be SUPERSEDED by a higher-priority channel:
ca-certificates    conda-forge::ca-certificates-2020.4.5~ --> pkgs/main::ca-certificates-2020.1.1-0
certifi            conda-forge::certifi-2020.4.5.2-py36h~ --> pkgs/main::certifi-2020.4.5.1-py36_0
numpy              conda-forge::numpy-1.18.5-py36h4d86e3~ --> pkgs/main::numpy-1.18.1-py36h93ca92e_0
openssl                                       conda-forge --> pkgs/main

Downloading and Extracting Packages
openssl-1.1.1g       | 4.8 MB    | ############################################################################ | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(pylayers) F:PycharmProjectspylayers-master>

我还尝试修改批处理文件以从基本环境激活pylayers环境并逐个运行condapip命令,但它仅安装到基本环境。查看蝙蝠脚本

尝试 1

Installer_win.bat文件:

call F:Anaconda3Scriptsactivate.bat
activate pylayers
pause
conda install numpy --yes
conda install mayavi --yes
conda install shapely --yes
conda install libgdal --yes
conda install gdal --yes
conda install h5py --yes
conda install seaborn --yes
conda install PIL --yes
conda install basemap --yes
conda install wxpython --yes
conda install netCDF4 --yes
pip install protobuf 
pip install tqdm
pip install descartes
pip install bitstring
pip install geocoder
pip install triangle
pip install osmapi
pip install pyshp 
pip install Image
pip install pathos
pip install SimPy==2.2
pip install simplekml
pip install smopy
python setup.py install

输出:激活 pylayers 环境并停止

(pylayers) F:PycharmProjectspylayers-master>installer_win.bat
(pylayers) F:PycharmProjectspylayers-master>call F:Anaconda3Scriptsactivate.bat
(base) F:PycharmProjectspylayers-master>activate pylayers
(pylayers) F:PycharmProjectspylayers-master>

尝试2:

Installer_win.bat文件:

call F:Anaconda3Scriptsactivate.bat
activate pylayers
conda install numpy --yes
conda install mayavi --yes
conda install shapely --yes
conda install libgdal --yes
conda install gdal --yes
conda install h5py --yes
conda install seaborn --yes
conda install PIL --yes
conda install basemap --yes
conda install wxpython --yes
conda install netCDF4 --yes
pip install protobuf 
pip install tqdm
pip install descartes
pip install bitstring
pip install geocoder
pip install triangle
pip install osmapi
pip install pyshp 
pip install Image
pip install pathos
pip install SimPy==2.2
pip install simplekml
pip install smopy
python setup.py install

输出:#activates 基本环境和停止

(pylayers) F:PycharmProjectspylayers-master>installer_win.bat
(pylayers) F:PycharmProjectspylayers-master>call F:Anaconda3Scriptsactivate.bat
(base) F:PycharmProjectspylayers-master>activate pylayers

尝试 3

Installer_win.bat文件:

call F:Anaconda3Scriptsactivate.bat
conda install numpy --yes
conda install mayavi --yes
conda install shapely --yes
conda install libgdal --yes
conda install gdal --yes
conda install h5py --yes
conda install seaborn --yes
conda install PIL --yes
conda install basemap --yes
conda install wxpython --yes
conda install netCDF4 --yes
pip install protobuf 
pip install tqdm
pip install descartes
pip install bitstring
pip install geocoder
pip install triangle
pip install osmapi
pip install pyshp 
pip install Image
pip install pathos
pip install SimPy==2.2
pip install simplekml
pip install smopy
python setup.py install

输出:#starts 安装在基本环境中

(pylayers) F:PycharmProjectspylayers-master>installer_win.bat
(pylayers) F:PycharmProjectspylayers-master>call F:Anaconda3Scriptsactivate.bat
(base) F:PycharmProjectspylayers-master>activate pylayers
(pylayers) F:PycharmProjectspylayers-master>installer_win.bat
(pylayers) F:PycharmProjectspylayers-master>call F:Anaconda3Scriptsactivate.bat
(base) F:PycharmProjectspylayers-master>conda install numpy --yes
Collecting package metadata (current_repodata.json): failed
CondaError: KeyboardInterrupt
^CTerminate batch job (Y/N)?
^C

有人可以帮助我在Conda虚拟环境下运行此批处理文件吗?

任何建议将不胜感激。

有两种方法可以走。我认为首先是更清洁的方式。

选项 1:YAML 定义

如果整个过程仅用于安装,则可以将其压缩为单个 YAML 环境定义并一次性执行。这包括本地软件包安装,对于当前示例,我将称之为foo

foo_install.yaml

name: foo_install
channels:
- defaults
dependencies:
- numpy
- mayavi
- shapely
- libgdal
- gdal
- h5py
- seaborn
- PIL
- basemap
- wxpython
- netCDF4
- pip
- pip:
- protobuf
- tqdm
- descartes
- bitstring
- geocoder
- triangle
- osmapi
- pyshp
- Image
- pathos
- SimPy==2.2
- simplekml
- smopy
- -e ./../foo  # this assumes running from inside the `foo` folder

要将其安装到任意 env 中(例如,pylevels(作为 env 的补充,可以使用

conda env update -n pylevels -f foo_install.yaml

这是从foo文件夹中运行的位置。

有关其他选项的展示,请参阅高级画中画示例(基本上,pip install接受的所有内容都可以包含在 YAML 文件中(。

选项 2:conda run

更一般地说,可以使用conda run在特定环境中运行任意脚本。这避免了在脚本本身中包含激活命令。在这种情况下,您可以使用

conda run -n pylevels installer_win.bat

只有当您还需要配置一些环境变量或类似的东西时,我才会求助于此。在这种情况下,我仍然会制作 YAML,并将所有安装减少到单行:

installer_win.bat

conda env update -f foo_install.yaml

并包括之后的进一步行动。

要在新的(非基本(conda env 中从 dos 提示符运行 bat 文件,您可以尝试如下操作:

prompt> cmd "/c activate ds_tensorflow &&myfile.bat && deactivate">

MyFile的内容.bat以表明您处于非基本环境中:

echo hello
python -c "import sys; print(sys.version)"

您可以将上面>>行中的 myfile.bat 替换为您的 bat 文件。这也可以在没有 bat 文件的情况下工作,只需在/c 激活中运行每个命令....停用包装器。

cmd "/c activate ds_tensorflow && python -c "import sys; print(sys.version)" && deactivate"

最新更新