我知道我要问的问题有成千上万的问题和答案,但是我需要为我的特殊问题做一个解释,因为这是我第一次使用别人编写的代码,而我对导入确实感到困惑。所以:我使用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']
如果再次提出此类问题,我感到非常抱歉,但是我在理解name,main和所有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] 删除。
我来说两句