2017-02-14 50 views
1

我安装在/opt目录中的应用程序,并添加其根到PATH(谁想要使用它的所有用户)。现在,当我从我的用户调用主脚本,它工作正常,但其他用户报告了同样的错误:无法导入本地模块

[email protected]:~$ 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_rootlib_absolute,所以我加了print(ragout_root, lib_absolute)只是from ragout.main import main之前看到的,发生了什么。现在,当我从我的用户运行应用程序时,我得到这个:

[email protected]:~$ 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 
... 

,并得到了用户这个

[email protected]:~$ 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 

对于它打印无论何种原因两次 - 尽管路径是正确的 - 它仍然无法从本地模块导入。有任何想法吗?

+2

脚本'的名称ragout.py'与'regout'包的名称冲突。你只需要重命名脚本。 –

+0

我认为'从ragout.main import main'尝试从'ragout.py'中导入'main',这个在那里没有定义。它打印两行,因为基本上你构建了一个[无限导入循环](http://stackoverflow.com/q/3558842/3005167),但Python太聪明了,无法锁定。 – kazemakase

+0

@kazemakase然后为什么它为我的用户工作? –

回答

2

我认为这是一个权限问题。请参阅this Stack Overflow question用户报告非常类似的问题。

  • 您创建的位置,因此,你有权为它和 可以进口。
  • 其他用户没有权限,不能从他们无法读取文件夹导入。

解决方法:确保所有适当的用户都在用户组至少读取权限的文件夹。

+0

是的,你是对的。用户有权访问包含'ragout.py'本身的根目录,但不能访问子目录。 –