Не могу импортировать локальный модуль

Я установил приложение в /opt каталог и добавил его корень в PATH (для всех пользователей, которые хотят его использовать). Теперь, когда я вызываю мастер-скрипт от моего пользователя, он работает нормально, но другие пользователи сообщают об этой же ошибке:

user@server:~$ ragout.py -h
Traceback (most recent call last):
  File "/opt/ragout-2.0-linux-x86_64/ragout.py", line 33, in <module>
    from ragout.main import main
  File "/opt/ragout-2.0-linux-x86_64/ragout.py", line 33, in <module>
    from ragout.main import main
ImportError: No module named main

Вот главный скрипт:

#!/usr/bin/env python2.7

#(c) 2013-2014 by Authors
#This file is a part of Ragout program.
#Released under the BSD license (see LICENSE file)

"""
This script does all the necessary preparations
and invokes Ragout
"""

import os
import sys

LIB_DIR = "lib"

#Check Python version
if sys.version_info[:2] != (2, 7):
    print("Error: Ragout requires Python version 2.7 ({0}.{1} detected)."
          .format(sys.version_info[0], sys.version_info[1]))
    sys.exit(-1)

#Setting executable paths
ragout_root = os.path.dirname(os.path.realpath(__file__))
lib_absolute = os.path.join(ragout_root, LIB_DIR)
sys.path.insert(0, lib_absolute)
sys.path.insert(0, ragout_root)
os.environ["PATH"] = lib_absolute + os.pathsep + os.environ["PATH"]


#Ragout entry point
from ragout.main import main
sys.exit(main())

Я подумал, что сценарий может столкнуться с некоторыми проблемами при расширении ragout_root а также lib_absoluteвот я и добавил print(ragout_root, lib_absolute) как раз перед from ragout.main import main чтобы увидеть, что происходит. Теперь, когда я запускаю приложение от своего пользователя, я получаю это:

me@server:~$ ragout.py -h
('/opt/ragout-2.0-linux-x86_64', '/opt/ragout-2.0-linux-x86_64/lib')
usage: ragout.py [-h] [-o output_dir] [-s {sibelia,maf,hal}] [--refine]
                 [--solid-scaffolds] [--overwrite] [--repeats] [--debug]
                 [-t THREADS] [--version]
                 recipe_file
...

и пользователи получают это

user@server:~$ ragout.py -h
('/opt/ragout-2.0-linux-x86_64', '/opt/ragout-2.0-linux-x86_64/lib')
('/opt/ragout-2.0-linux-x86_64', '/opt/ragout-2.0-linux-x86_64/lib')
Traceback (most recent call last):
  File "/opt/ragout-2.0-linux-x86_64/ragout.py", line 33, in <module>
    from ragout.main import main
  File "/opt/ragout-2.0-linux-x86_64/ragout.py", line 33, in <module>
    from ragout.main import main
ImportError: No module named main

По какой-то причине он печатает дважды и - хотя пути правильные - он все равно не может импортировать из локального модуля. Есть идеи?

1 ответ

Решение

Я думаю, что это проблема с разрешениями. См. Этот вопрос переполнения стека, где пользователь сообщает об очень похожей проблеме.

  • Вы создали местоположение, поэтому у вас есть разрешения для него и вы можете импортировать его.
  • Другие пользователи не имеют разрешения и не могут импортировать из папки, которую они не могут прочитать.

Решение: убедитесь, что все соответствующие пользователи входят в группу пользователей с как минимум разрешением на чтение в папку.

Другие вопросы по тегам