2016-01-28 42 views
0
  1. 我想了解与我的项目相关的PYTHONPATH试图了解PYTHONPATH

我的项目是在DIR $HOME/Programs/medusa-2.0,和我的源文件都在$HOME/Programs/medusa-2.0/medusa

我已经把我的PYTHONPATH在.bashrc这样的:

export MEDUSA_HOME=$HOME/Programs/medusa-2.0 
export PYTHONPATH=${MEDUSA_HOME}/medusa:${PYTHONPATH} 

当我尝试导入一个类,from system import error_handler, hello,我得到的错误说,它不能找到函数execute_command。我不明白为什么我会得到这个错误?是因为我在进口中做循环,因为execute_commandmedusasettings

ImportError        Traceback (most recent call last) 
<ipython-input-2-7f959e81c735> in <module>() 
----> 1 from medusasystem import error_handler, hello 

/home/ubuntu/Programs/medusa-2.0/medusa/medusasystem.py in <module>() 
    9 from local import lcat 
10 import psutil 
---> 11 import ranking 
12 import settings 
13 import simplejson as json 

/home/ubuntu/Programs/medusa-2.0/medusa/ranking.py in <module>() 
    7 import cache 
    8 from decors import make_verbose 
----> 9 from scheduler.predictionranking import get_prediction_metrics 
10 from scheduler.randomranking import get_random_metrics 
11 from settings import medusa_settings 

/home/ubuntu/Programs/medusa-2.0/medusa/scheduler/predictionranking.py in <module>() 
    6 
    7 from celery import task 
----> 8 import hdfs 
    9 from networkdaemon import read_network_data 
10 from numpylinearregression import estimate_job_execution, calculate_linear_regression_numpy 

/home/ubuntu/Programs/medusa-2.0/medusa/hdfs.py in <module>() 
    4 from hadoopy._hdfs import _checked_hadoop_fs_command 
    5 from celery import task 
----> 6 from medusasystem import execute_command 
    7 import settings 
    8 

ImportError: cannot import name execute_command 

我曾尝试推出一个Python文件与python -v,我已经得到了这个错误:

# /home/ubuntu/Programs/medusa-2.0/medusa/hdfs.pyc matches /home/ubuntu/Programs/medusa-2.0/medusa/hdfs.py 
import hdfs # precompiled from /home/ubuntu/Programs/medusa-2.0/medusa/hdfs.pyc 
Traceback (most recent call last): 
File "tests/testHello.py", line 3, in <module> 
from medusasystem import error_handler, hello 
File "/home/ubuntu/Programs/medusa-2.0/medusa/medusasystem.py", line 11, in <module> 
import ranking 
File "/home/ubuntu/Programs/medusa-2.0/medusa/ranking.py", line 9, in <module> 
from scheduler.predictionranking import get_prediction_metrics 
File "/home/ubuntu/Programs/medusa-2.0/medusa/scheduler/predictionranking.py", line 8, in <module> 
import hdfs 
File "/home/ubuntu/Programs/medusa-2.0/medusa/hdfs.py", line 6, in <module> 
from medusasystem import execute_command 
ImportError: cannot import name execute_command 
  • 如果我启动我的virtualenv为我的项目,不应该在virtualenv中定义PYTHONPATH吗?
  • +1

    如果您在启动Python时使用'-v'erbose标志,它会解释很多关于导入的问题 –

    +0

    在我的情况下,它并没有给我很多解释。你可以检查我在原帖中添加了什么。 – xeon123

    +0

    错误部分不是你应该看到的 - 观看所有的消息。您会看到它与哪些文件匹配。 *你*在任何地方写了一个名为'medusasystem.py'或'.pyc'的模块吗? –

    回答

    0
    1. 随着提供的信息,我觉得你只是从错误的地方将其导入:“我不明白为什么我得到这个错误是因为我在进口做一个循环周期因为execute_command在medusasettings?“但在追踪中有from settings import medusa_settingsfrom medusasystem import execute_command。验证execute_command是否在medusasystem中。

    2. virtualenv不会改变PYTHONPATH,所以激活后它会一样(除非你做了类似于下一句话的东西)。如果你的问题是关于在使用virtualenv时设置它的话,请看这个答案:How do you set your pythonpath in an already-created virtualenv?。通过在.bashrc中执行,您在打开shell时将其定义,而不是将其附加到virtualenv脚本。

    0

    问题是循环导入问题。我换成:

    from medusasystem import execute_command 
    

    import medusasystem 
    execute_command = medusasystem.execute_command 
    

    和它的工作。