Импорт модулей python Conda из неконда python - PullRequest
0 голосов
/ 02 апреля 2020

Я работаю над проектом, который требует поддержки обоих модулей python в среде Conda и за ее пределами. Мы строим программу на C ++, которая использует встроенный интерпретатор pybind11 (который использует lib python под капотом), и наша система сборки может использовать только свою собственную lib python вместо библиотеки Conda lib python. Есть ли способ загрузить модули python Конды с помощью такого бинарного файла?

Я думал, что может быть две возможности: 1) После сборки программы cpp переключите lib python rpath программы 2) Продолжайте использовать lib python, предоставляемый системой сборки, но расширяйте python модулями Conda, расширяя sys.path

Обычно я думаю, что 2) менее рискованно, чем 1) потому что 2) использует четко определенный API для импорта модулей, поэтому попробовал это, как показано ниже. Результатом является то, что для некоторых модулей (например, наши собственные python модули, которые были установлены внутри Conda env или сторонние модули, такие как tzlocal) работает. Однако, похоже, у Numpy есть некоторые проблемы.

Мой вопрос: 2) действительно хорошая идея в этой ситуации? Или это нарушает философию Конды? Я помню, как кто-то (в SO, я думаю) сказал, что Conda использует какой-то жестко заданный путь, чтобы гарантировать, что все python модули изолированы внутри среды, но не уверен, что это актуально.

Любые комментарии приветствуются!

$ python
Python 3.7.6 (default, Jan 30 2020, 09:44:41) 
[GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.extend(['/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/lib-dynload', '/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages')
>>> import numpy
Traceback (most recent call last):
  File "/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages/numpy/core/__init__.py", line 40, in <module>
    from . import multiarray
  File "/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages/numpy/core/multiarray.py", line 13, in <module>
    from . import overrides
  File "/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages/numpy/core/overrides.py", line 6, in <module>
    from numpy.core._multiarray_umath import (
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages/numpy/__init__.py", line 142, in <module>
    from . import core
  File "/home/hokira/miniconda3/envs/ctrldev/lib/python3.6/site-packages/numpy/core/__init__.py", line 71, in <module>
    raise ImportError(msg)
ImportError: 

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the multiarray numpy extension module failed.  Most
likely you are trying to import a failed build of numpy.
Here is how to proceed:
- If you're working with a numpy git repository, try `git clean -xdf`
  (removes all files not under version control) and rebuild numpy.
- If you are simply trying to use the numpy version that you have installed:
  your installation is broken - please reinstall numpy.
- If you have already reinstalled and that did not fix the problem, then:
  1. Check that you are using the Python you expect (you're using /usr/bin/python),
     and that you have no directories in your PATH or PYTHONPATH that can
     interfere with the Python and numpy versions you're trying to use.
  2. If (1) looks fine, you can open a new issue at
     https://github.com/numpy/numpy/issues.  Please include details on:
     - how you installed Python
     - how you installed numpy
     - your operating system
     - whether or not you have multiple versions of Python installed
     - if you built from source, your compiler versions and ideally a build log

     Note: this error has many possible causes, so please don't comment on
     an existing issue about this - open a new one instead.

Original error was: No module named 'numpy.core._multiarray_umath'
...