Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在脚本中导入我的文件时出现Python问题(不在控制台中)_Python_Import_Python Module - Fatal编程技术网

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

在脚本中导入我的文件时出现Python问题(不在控制台中),python,import,python-module,Python,Import,Python Module,我知道我要问的问题有上千个问题和答案,但我需要对我的特殊问题进行解释,因为这是我第一次使用别人编写的代码,我对导入非常困惑。 所以:我使用Pycharm,直接从gitLab repo中提取所有代码(按目录组织) 结构如下: C:\users\marco\PycharmProjects\Avv └──ads-ai └──src └──dataElab └──dataprep.py └──datamod.py

我知道我要问的问题有上千个问题和答案,但我需要对我的特殊问题进行解释,因为这是我第一次使用别人编写的代码,我对导入非常困惑。 所以:我使用Pycharm,直接从gitLab repo中提取所有代码(按目录组织)

结构如下:

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添加路径 -相对路径(从..导入mod1),但给我ValueError:尝试在顶级包之外进行实时导入 -绝对路径

但是什么都没有,对于mod1或log_设置,我总是出现“无模块”错误

我想使用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\DLLs','C:\Users\marco.onnis\AppData\Local\Continuum\Continuum\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\xlswriter-1.2.8-py3.6.egg']

如果我再次问这类问题,我很抱歉,但我在理解名称主音以及所有这些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
这里有两种导入方法,使用
\uuuu init\uuuu.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
import mod1  # imports mod1.py
import api # imports api.py
import api
使用x import y中的
的第二种方法是在每个目录中放置一个空的
\uuu init\uuuu.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

from src import mod1  # imports mod1.py from '/src' folder
from src.rest import api  # imports api.py from '/src/rest' folder
import mod1  # imports mod1.py
import api # imports api.py
import api
因此,您可以拥有以下内容

main.py

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

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

e、 g

main.py

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