Почему 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
Другие вопросы по тегам