2

试图利用 Conda 的构建功能来安装不在 conda 存储库中的包。我已经下载了我想要的包的源文件。在同一级别,我为我的conda recipes创建了一个文件夹,其中包含meta.yaml设置source: path: ../<package-name>。因此,查找一个目录以找到源文件。这行得通。

当构建尝试测试导入包时,问题发生在最后。它说x module not found,但我conda build从 conda 环境中调用,其中安装了丢失的包,如conda list.

我如何知道在什么环境conda build中执行这些测试?

使用时如何设置环境conda build

Conda Build文档中充满了environment一词无济于事,但这主要是指环境变量而不是conda 环境

(base) C:\Users\myhome\PyTools\bin>conda info

     active environment : base
    active env location : C:\Users\myhome\Miniconda3_64-4.5.4
            shell level : 1
       user config file : C:\Users\myhome\.condarc
 populated config files : C:\Users\myhome\.condarc
          conda version : 4.5.4
    conda-build version : 3.18.9
         python version : 3.6.5.final.0
       base environment : C:\Users\myhome\Miniconda3_64-4.5.4  (writable)
           channel URLs : https://conda.anaconda.org/anaconda/win-64
                          https://conda.anaconda.org/anaconda/noarch
                          https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/free/win-64
                          https://repo.anaconda.com/pkgs/free/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/pro/win-64
                          https://repo.anaconda.com/pkgs/pro/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
                          https://conda.anaconda.org/conda-forge/win-64
                          https://conda.anaconda.org/conda-forge/noarch
          package cache : C:\Users\myhome\Miniconda3_64-4.5.4\pkgs
                          C:\Users\myhome\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\myhome\Miniconda3_64-4.5.4\envs
                          C:\Users\myhome\AppData\Local\conda\conda\envs
                          C:\Users\myhome\.conda\envs
               platform : win-64
             user-agent : conda/4.5.4 requests/2.18.4 CPython/3.6.5 Windows/10 Windows/10.0.17763
          administrator : False
             netrc file : None
           offline mode : False

(myenv) C:\Users\myhome\PyTools\bin>conda build <module to install>
...
set PREFIX=C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\_test_env
set SRC_DIR=C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\test_tmp

(myenv) %SRC_DIR%>call "%SRC_DIR%\conda_test_env_vars.bat"

(myenv) %SRC_DIR%>call "C:\Users\myhome\Miniconda3_64-4.5.4\Scripts\activate.bat" "%PREFIX%"

(%PREFIX%) %SRC_DIR%>IF 0 NEQ 0 exit 1

(%PREFIX%) %SRC_DIR%>IF 0 NEQ 0 exit 1

(%PREFIX%) %SRC_DIR%>"%PREFIX%\python.exe" -s "%SRC_DIR%\run_test.py"
Traceback (most recent call last):
import: 'swaggerpy'
  File "C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\test_tmp\run_test.py", line 2, in <module>
    import swaggerpy
  File "C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\_test_env\lib\site-packages\swaggerpy\__init__.py", line 13, in <module>
    from .swagger_model import load_file, load_json, load_url, Loader
  File "C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\_test_env\lib\site-packages\swaggerpy\swagger_model.py", line 15, in <module>
    from swaggerpy.http_client import SynchronousHttpClient
  File "C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\swaggerpy_1568484873987\_test_env\lib\site-packages\swaggerpy\http_client.py", line 11, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

(%PREFIX%) %SRC_DIR%>IF 1 NEQ 0 exit 1
Tests failed for swaggerpy-0.2.1-py36_0.tar.bz2 - moving package to C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\broken
WARNING:conda_build.build:Tests failed for swaggerpy-0.2.1-py36_0.tar.bz2 - moving package to C:\Users\myhome\Miniconda3_64-4.5.4\conda-bld\broken
TESTS FAILED: swaggerpy-0.2.1-py36_0.tar.bz2

(myenv) C:\Users\myhome\PyTools\bin>conda list
# packages in environment at C:\Users\myhome\Miniconda3_64-4.5.4\envs\myenv:
#
# Name                    Version                   Build  Channel
...
requests                  2.22.0                   py36_0    anaconda
...
4

1 回答 1

0

我仍在解决类似的问题,但我认为我至少可以部分帮助您。(或者有同样问题的人)。

conda-build 结束时的测试步骤使用一个全新的环境 - 它将只包含您的包及其特定要求(如 . 中指定的那样recipe/meta.yaml。(注意,您没有显示您的meta.yaml, 而这是解决此问题的关键)

如果您的包裹需要它,请在您的meta.yaml:

requirements:
  host:
    - python
    - pip
  run:
    - python
    - requests  # here

如果您的包并不真正需要它,但测试代码(例如单元测试)需要它来运行,请使用这种部分:

test:
  requires:
    - nose  # e.g. some test runners
    - requests  # extra deps for test

这些软件包将使用 安装conda,而不是pip.

如何从中获取东西pip,或以任意方式修改测试环境?这个我还在摸索中...

于 2020-04-02T21:38:14.270 回答