Python 试图理解蟒蛇

Python 试图理解蟒蛇,python,python-2.7,Python,Python 2.7,我正在努力理解与我的项目相关的PYTHONPATH 我的项目位于目录$HOME/Programs/medusa-2.0,我的源文件位于$HOME/Programs/medusa-2.0/medusa 我在.bashrc中设置了PYTHONPATH,如下所示: export MEDUSA_HOME=$HOME/Programs/medusa-2.0 export PYTHONPATH=${MEDUSA_HOME}/medusa:${PYTHONPATH} 当我试图从system import e

我正在努力理解与我的项目相关的
PYTHONPATH

我的项目位于目录
$HOME/Programs/medusa-2.0
,我的源文件位于
$HOME/Programs/medusa-2.0/medusa

我在
.bashrc
中设置了PYTHONPATH,如下所示:

export MEDUSA_HOME=$HOME/Programs/medusa-2.0
export PYTHONPATH=${MEDUSA_HOME}/medusa:${PYTHONPATH}
当我试图从system import error\u handler,hello导入一个类时,我收到的错误是它找不到函数
execute\u命令
。我不明白为什么会出现这个错误?是否因为
execute_command
位于
medusasettings
中,所以我在导入中执行循环

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
  • 如果我为我的项目启动我的virtualenv,PYTHONPATH不应该在virtualenv中定义吗
  • 根据提供的信息,我认为您只是从错误的位置导入了它:“我不明白为什么会出现此错误?是因为我在导入中执行循环,因为execute_命令在medusasettings中?”但在跟踪中有来自设置导入medusa_设置的
    和来自medusa系统导入执行_命令的
    。验证execute_命令是否在MEDUSA系统中

  • virtualenv不会改变PYTHONPATH,因此激活后它将保持不变(当然,除非您执行下一句中所述的操作)。如果您的问题是关于在使用virtualenv时设置它,请参阅以下答案:。通过在.bashrc中执行此操作,您可以在打开shell时定义它,而不是将其附加到virtualenv脚本


  • 该问题与循环进口问题有关。我替换了:

    from medusasystem import execute_command
    


    如果在启动Python时使用
    -v
    erbose标志,它将解释很多关于重要性的问题。在我的情况下,它没有解释太多。您可以查看我在原始帖子中添加的内容。错误部分不是您应该查看的内容-查看所有经过的消息。您将看到它从何处匹配文件。您是否在路径中的任何位置编写了名为
    medusasystem.py
    .pyc
    的模块?首先,除了我得到的错误,所有日志似乎都正常。第二,我不理解你关于
    .py
    pyc
    的问题。我已经编写了
    py
    文件,是python引擎(我不知道名称)将文件转换成
    pyc
    。日志将告诉您它从哪里导入
    medusasystem
    。大概是在
    /home/ubuntu/Programs/medusa-2.0/medusa/medusa.py
    中。但可能不是这样。如果您创建了
    medusasystem.py
    或者它存在于
    sys.path
    上的任何其他地方,那么它可能不是美杜莎所期望的。无论哪种方式,您都可以转到该文件并检查该特定文件中是否有
    execute\u命令
    函数。
    from medusasystem import execute_command
    
    import medusasystem
    execute_command = medusasystem.execute_command