【问题标题】:How to execute a batch script from an anaconda virtual environment (not from base)?如何从 anaconda 虚拟环境(不是从基础)执行批处理脚本?
【发布时间】:2020-10-04 06:08:48
【问题描述】:

我想在 Conda 环境中运行批处理文件,而不是在 base 环境中,而是在另一个虚拟环境中(此处为 pylayers)。 我将activate.bat 脚本从F:\Anaconda3\Scripts 复制到F:\Anaconda3\envs\pylayers\Scripts

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

call F:\Anaconda3\envs\pylayers\Scripts\activate.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:\Users\mkdth>activate pylayers

(pylayers) C:\Users\mkdth>cd /d F:\Pycharm\Projects\pylayers-master

(pylayers) F:\Pycharm\Projects\pylayers-master>installer_win.bat

(pylayers) F:\Pycharm\Projects\pylayers-master>call F:\Anaconda3\envs\pylayers\Scripts\activate.bat
The system cannot find the path specified.

(pylayers) F:\Pycharm\Projects\pylayers-master>conda install numpy --yes
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: F:\Anaconda3\envs\pylayers

  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:\Pycharm\Projects\pylayers-master>

我还尝试修改批处理文件以从 base 环境中激活 pylayers 环境并一一运行 condapip 命令,但它仅安装到 base 环境。看bat脚本

尝试 1

Installer_win.bat文件:

call F:\Anaconda3\Scripts\activate.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:\Pycharm\Projects\pylayers-master>installer_win.bat

(pylayers) F:\Pycharm\Projects\pylayers-master>call F:\Anaconda3\Scripts\activate.bat

(base) F:\Pycharm\Projects\pylayers-master>activate pylayers

(pylayers) F:\Pycharm\Projects\pylayers-master>

尝试2:

Installer_win.bat文件:

call F:\Anaconda3\Scripts\activate.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:\Pycharm\Projects\pylayers-master>installer_win.bat

(pylayers) F:\Pycharm\Projects\pylayers-master>call F:\Anaconda3\Scripts\activate.bat

(base) F:\Pycharm\Projects\pylayers-master>activate pylayers

尝试 3

Installer_win.bat文件:

call F:\Anaconda3\Scripts\activate.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:\Pycharm\Projects\pylayers-master>installer_win.bat

(pylayers) F:\Pycharm\Projects\pylayers-master>call F:\Anaconda3\Scripts\activate.bat

(base) F:\Pycharm\Projects\pylayers-master>activate pylayers

(pylayers) F:\Pycharm\Projects\pylayers-master>installer_win.bat

(pylayers) F:\Pycharm\Projects\pylayers-master>call F:\Anaconda3\Scripts\activate.bat

(base) F:\Pycharm\Projects\pylayers-master>conda install numpy --yes
Collecting package metadata (current_repodata.json): failed

CondaError: KeyboardInterrupt

^CTerminate batch job (Y/N)?
^C

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

非常感谢任何建议。

【问题讨论】:

  • 请重新审视您的问题并正确格式化,这不仅仅是批处理文件的代码/内容!
  • 这个脚本除了安装东西还有其他目的吗?如果没有,我建议将所有这些都放入a YAML environment definition(是的,它也可以安装本地的东西——见Advanced Pip Example),然后简单地运行conda env update -n pylayers -f env.yaml。否则,要在环境中执行任意脚本,有conda run -n pylayers installer_win.bat
  • 由于conda 是一个批处理文件,这些命令中的每一个是否都不应由call 执行?
  • 感谢@merv "conda run -n pylayers installer_win.bat" 工作。 'conda env update -n pylayers -f env.yml' 的想法也是如此。
  • 好的,我把它写成了一个正确的答案。

标签: batch-file pip anaconda conda virtual-environment


【解决方案1】:

要在新的(非基础)conda 环境中从 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 activate .... 中运行每个命令即可。停用包装器。

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

【讨论】:

【解决方案2】:

有两条路可以走。我认为第一个是更清洁的方式。

选项 1:YAML 定义

如果整个过程仅用于安装,则可以将其压缩为单个YAML environment definition 并一次性执行。这包括本地软件包安装,对于当前示例,我将调用 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

要将其安装到任意环境(例如,pylevels)作为环境的添加,可以使用

conda env update -n pylevels -f foo_install.yaml

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

请参阅 the Advanced Pip Example 了解其他选项的展示(基本上,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

并在此之后包含进一步的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2011-06-15
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多