Python在脚本中导入文件的问题(不在控制台中)

马可·昂尼斯(Marco Onnis)

我知道我要问的问题有成千上万的问题和答案,但是我需要为我的特殊问题做一个解释,因为这是我第一次使用别人编写的代码,而我对导入确实感到困惑。所以:我使用Pycharm,我直接从gitLab存储库中提取了所有代码(按目录组织)。

这是结构:

C:\users\marco\PycharmProjects\Avv
└──ads-ai
     └──src
         └──dataElab
             └──dataprep.py
             └──datamod.py
         ├──doc2vec
         ├──logger
              └──log_setup.py
         ├──res
         ├──mod1.py
         ├──mod2.py
         ├──mod3.py
         └──rest
              └──api.py

我的起始脚本是api.py,我需要在其中导入mod1.py-

但是开始写

import mod1

给我一个错误。

问题还在于,在mod1上,还有其他导入:

from logger import log_setup
from dataElab import dataprep, datamod

所有导入都会给我错误'NoModuleFound'。我试过:-使用sys.path.append添加路径-相对路径(来自.. import mod1),但给我ValueError:尝试了超出顶级包的实际导入-绝对路径

但什么都没有,对于mod1或log_setup,我始终会出现“无模块”错误。

我想使用Pycharm的脚本,而不是Python控制台。如果我使用os.getwd()检查-> C:\ users \ marco \ PycharmProjects \ Avv \ ads-ai \ src \ rest(应该正确)。

并使用sys.path --->

['C:\ Users \ marco.onnis \ PycharmProjects \ Avvocatura2020 \ ads-ai \ src \ restAPI','C:\ Users \ marco.onnis \ PycharmProjects \ Avvocatura2020','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020 \ python36.zip','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020 \ DLL','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020 \ lib','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020 \ lib \ site-packages','C:\ Users \ marco.onnis \ AppData \ Local \ Continuum \ anaconda3 \ envs \ Avvocatura2020 \ lib \ site-packages \ xlsxwriter-1.2。 8-py3.6.egg']

如果再次提出此类问题,我感到非常抱歉,但是我在理解namemain和所有stuf的概念时遇到了问题,我不知道该怎么办(我希望那时候大致了解主题)

非常感谢!

米希

我想简化此过程并帮助您理解的第一件事是在根目录中有一个main.py。

C:\users\marco\PycharmProjects\Avv
└──ads-ai
 └──main.py  # main script to run your code
 └──src
     └──dataElab
         └──dataprep.py
         └──datamod.py
     ├──doc2vec
     ├──logger
          └──log_setup.py
     ├──res
     ├──mod1.py
     ├──mod2.py
     ├──mod3.py
     └──rest
          └──api.py

有两种方法可以在这里导入,即使用__init__.py文件还是相对导入。相对导入的示例如下所示,其中您引用目录(或使用点表示法的子目录)

main.py

from src import mod1  # imports mod1.py from '/src' folder
from src.rest import api  # imports api.py from '/src/rest' folder

解决该问题的第二种方法from x import y__init__.py在每个目录中放置一个空文件

C:\users\marco\PycharmProjects\Avv
└──ads-ai
 └──main.py
 └──src
     └──__init__.py
     └──dataElab
         └──__init__.py
         └──dataprep.py
         └──datamod.py
     ├──doc2vec
     ├──logger
          └──__init__.py
          └──log_setup.py
     ├──res
     ├──mod1.py
     ├──mod2.py
     ├──mod3.py
     └──rest
          └──__init__.py
          └──api.py

然后可以像这样导入

main.py

import mod1  # imports mod1.py
import api # imports api.py

因此,您可以拥有以下内容

main.py

import api

api.py

import mod1

从不同位置导入时,您应该有所不同,因为如果模块共享相同的文件名(只是在不同目录中),则可能会导致模块名称冲突。在这种情况下,您还应该添加as交易模块名称

例如

main.py

from src import mod1 as mod_one
from src.rest import mod1 as mod_1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jenkins不在控制台中打印python脚本的输出

即使可以在Python控制台中导入nltk,也无法在Jupyter中导入

如何在浏览器控制台中导入 javascript 文件?

导入在控制台中工作,但不在pyCharm中

如何在 ROS 工作台中的简单 python 脚本中导入 Webots 控制器库

xmlhttprequests 在控制台中工作,但不在脚本中

Winston在控制台中登录,但不在日志文件中

无法在jupyter笔记本中导入psycopg2,但可以在python3控制台中导入

python脚本中导入psutil的问题

Python脚本在控制台中运行,但作为脚本出错

无法在 Scala 控制台中导入 jar 以运行 Spark 程序

JQuery:脚本在控制台中工作,但不在附件中工作

不在python中导入形状

如何将文件加载到python控制台中?

Python:如何在txt文件的控制台中写入错误?

控制台中文件夹目录的Python实现

在 Python 中导入的问题

Python:停止脚本会在控制台中生成输出,但不会在日志文件中生成

Spring Boot:在控制台中打印的堆栈跟踪不在日志文件中

Powershell Trasnscript-输出到文件且不在控制台中显示

在python控制台中导航到单词/行的开头/结尾

在 R 控制台中执行脚本

脚本控制台中的 Jenkins 作业执行

Firebase控制台中的“禁止操作”问题

控制台中的laravel vue缩进问题

如何删除控制台中的输入问题?

Peewee 在 python 控制台中检索数据但不在应用程序中

cheerio选择器(Node.js)在控制台中运行,但不在我的脚本中运行

在控制台中打印/ etc / shadow文件