当前位置: 首页 > 知识库问答 >
问题:

PyCharm如何处理模块的相对导入?

屈博
2023-03-14

我在继承的项目上有以下目录结构:

work_dir/
    FlaskControlPanel/
        static/
        templates/
        app.py
    models/
        __init__.py
        model1.py
        model2.py
    script1.py
    script2.py

script1。py脚本2。py我可以从模型运行此。model1导入Class1、Class2,并且可以正常工作。使用PyCharm时,我可以在应用程序中使用相同的导入行。py

然而,当我在我的dev服务器上部署它时,这在应用程序中不起作用。py。我得到错误ImportError:没有名为models的模块。型号1

PyCharm做了些什么来避开这个问题?

如何在应用程序中修复导入。py在开发服务器上运行Flask应用程序时是否同时在PyCharm中工作?我通常只使用python应用程序在服务器上运行它。py来自FlaskControlPanel目录。

共有1个答案

阎自怡
2023-03-14

您必须确保将work\u dir添加到sys中。路径或蟒蛇路径。

Python会自动将脚本文件的父文件夹添加到sys.path。所以如果你在shell中运行app.py,只有FlaskControlPanel会被插入sys.pathpython找不到模型在哪里(work_dir不在sys.path)。

但是在py魅力中,它总是会在sys.path.中添加work_dir这就是为什么你可以毫无问题地运行app.py

对于您的问题,您可以将目录更改为work\u dir并运行PYTHONPATH=。python烧瓶控制面板/应用程序。py

https://docs.python.org/2/using/cmdline.html#interface-options

执行脚本中包含的Python代码,该代码必须是一个文件系统路径(绝对或相对),引用Python文件或包含_umain_;的目录。py文件,或包含_umain的zipfile。py文件。

如果给出此选项,sys.argv的第一个元素将是命令行上给出的脚本名称。

如果脚本名称直接引用一个Python文件,包含该文件的目录将被添加到sys.path的开始,该文件将作为__main__模块执行。

如果脚本名称引用目录或zipfile,则脚本名称将添加到sys的开头。路径和主路径。该位置的py文件作为_主模块执行。

 类似资料:
  • 问题内容: 在PyCharm中,我添加了Python环境。然而, 失败作为未定义的引用。但是,它在命令行的Python解释器中运行良好。 GNURadio可以在Pycharm外部使用python正常工作。一切都已安装并配置为我想要的方式。 格努拉迪奥位于 也: PYTHONPATH = / usr / local / lib / python2.7 / site-packages:/usr/loc

  • 根据这个答案,您可以使用来使用类似这样的相对导入: 为什么相对导入不适用于sklearn。特征提取。文本 我验证了是一个具有以下功能的模块: 编辑 “不工作”,我的意思是它不导入模块。 我正在使用Python 3.4 绝对方式工作: 相对方式不:

  • 我是PyCharm的新手,很难将我编写的模块导入Python控制台。如果我尝试导入Python自带的模块,我可以毫无困难地导入该模块,但是如果我尝试导入我编写的模块,我会得到一个导入错误:没有名为“ModuleITriedToImportName”的模块。例如,这里有一个简单的自我编写的模块pickle文件称为“文件pickle”: 如果我尝试在PyCharm Python控制台上“导入pickl

  • 我在Pycharm中有一个python项目,其中有一个嵌套的Git子模块。以下是文件夹结构: 中的导入结构如下: 但是,Pycharm没有意识到这一点,而是希望我拥有以下内容: 这是有问题的,因为我不想更改中的所有导入(这似乎不是一个好的实践,也不可扩展),而且中有破折号,这对于导入来说不是有效的Python语法(我无法重命名repo)。 我还需要一种从我的代码中导入的方法。像这样的东西: 但当然

  • 我在项目目录中有一个自己的模块,并将其导入到代码中。 main.py my_模块.py: 在PyCharm中运行代码没有问题。但是当我试图“在控制台中执行选择”时,我得到 < code>Traceback(最近一次调用last): File " 如何在PyCharm控制台中导入自己的模块?

  • 问题内容: 我想知道在Python应用程序中导入包的首选方法。我有一个这样的包结构: project.app1.views进口project.app1.models和project.app2.models。我想到有两种方法可以做到这一点。 绝对进口: 或具有明确的相对导入,如在Python 2.5中使用PEP 328引入的那样: 什么是最pythonic的方式做到这一点? 问题答案: 绝对进口。从