Почему python не импортирует мою библиотеку, даже если при ее использовании sbatch с SLURM он сообщает о существующей файловой системе?
Я пытался использовать простой сценарий, который импортировал пространства имен библиотеки при использовании SLURM и sbatch, однако я не могу это сделать, потому что он не находит библиотеку (даже несмотря на то, что список пипсов показывает, что она установлена в моей среде).
Сценарий, который я запускаю, смехотворно прост:
#!/bin/python
#SBATCH --job-name=Python
#import namespaces as ns
import os
#location it should be installed
path = '/home/username/envs/tensorflow/lib/python2.7/site-packages'
ls = os.listdir(path)
print(ls)
print('namespaces' in ls) #does exist
#when using sbatch these lines fail
import namespaces as ns
print ns
это просто показывает, где установлена библиотека. Когда я запускаю его на главном узле SLURM (кластер) с python ns_test.py
он печатает правильно:
(env)user/om/user/user/MEng/hbf_tensorflow_code/tf_experiments_scripts $ python ns_test.py
['README', 'my-tf-proj.egg-link', 'tensorflow-0.9.0.dist-info', 'wheel', 'Keras-1.0.6.dist-info', 'numpy-1.11.1-py2.7.egg-info', 'wheel-0.29.0.dist-info', 'easy-install.pth', 'PyYAML-3.11.dist-info', 'sklearn', 'easy_install.pyc', 'google', 'tensorflow', 'namespaces', 'scikit_learn-0.17.1-py2.7.egg-info', 'setuptools-24.0.0.dist-info', 'wheel-0.29.0-py2.7.egg-info', 'keras', 'Theano-0.8.2.dist-info', 'easy_install.py', 'six.pyc', 'yaml', 'protobuf-3.0.0b2-py2.7-nspkg.pth', 'numpy-1.11.1.dist-info', 'namespaces-1.0.0.dist-info', 'pip-8.1.2-py2.7.egg-info', 'setuptools', 'theano', 'six-1.10.0.dist-info', 'setuptools-23.0.0-py2.7.egg', 'pip', 'setuptools.pth', 'six.py', 'protobuf-3.0.0b2.dist-info', 'scipy-0.17.1-py2.7.egg-info', 'numpy', 'external', 'pkg_resources', 'scipy']
True
<module 'namespaces' from '/home/user/envs/tensorflow/lib/python2.7/site-packages/namespaces/__init__.pyc'>
когда я делаю srun python ns_test.py
это снова печатает выше. Однако, когда я использую sbatch, он печатает (в журнал slurm) следующие загадочные строки кода:
['README', 'my-tf-proj.egg-link', 'tensorflow-0.9.0.dist-info', 'wheel', 'Keras-1.0.6.dist-info', 'numpy-1.11.1-py2.7.egg-info', 'wheel-0.29.0.dist-info', 'easy-install.pth', 'PyYAML-3.11.dist-info', 'sklearn', 'easy_install.pyc', 'google', 'tensorflow', 'namespaces', 'scikit_learn-0.17.1-py2.7.egg-info', 'setuptools-24.0.0.dist-info', 'wheel-0.29.0-py2.7.egg-info', 'keras', 'Theano-0.8.2.dist-info', 'easy_install.py', 'six.pyc', 'yaml', 'protobuf-3.0.0b2-py2.7-nspkg.pth', 'numpy-1.11.1.dist-info', 'namespaces-1.0.0.dist-info', 'pip-8.1.2-py2.7.egg-info', 'setuptools', 'theano', 'six-1.10.0.dist-info', 'setuptools-23.0.0-py2.7.egg', 'pip', 'setuptools.pth', 'six.py', 'protobuf-3.0.0b2.dist-info', 'scipy-0.17.1-py2.7.egg-info', 'numpy', 'external', 'pkg_resources', 'scipy']
True
Traceback (most recent call last):
file "/home/slurm/slurmd/job3210331/slurm_script", line 12, in <module>
import namespaces as ns
ImportError: No module named namespaces
что действительно таинственно, потому что оно говорит, что библиотека там присутствует! Однако, когда я использую оператор импорта с sbatch, он не находит его. Почему это может быть? Как я могу это исправить?
1 ответ
Скорее всего, проблема в том, что ваш slurm не использует правильный интерпретатор Python и, следовательно, правильный sys.path python. Чтобы исправить это, сообщите slurm в верхней части скрипта отправки, какой это тип файла, указав на правильный интерпретатор Python, например, чтобы использовать Python среды:
#!/usr/bin/env python
этот указывает на систему по умолчанию:
#!/bin/python
для другого примера с использованием conda env:
#!/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python
если у вас активирован conda env, вы можете найти путь с помощьюwhich python
команда termianl, например:
(iit_term_synthesis) brandomiranda~ ❯ which python
/Users/brandomiranda/miniconda/envs/iit_term_synthesis/bin/python