Python 3.x 导入python包的内部模块
我知道这个问题很可能有重复的地方,所以我提前道歉,因为我花了大量时间挖掘,但一直没能找到它 我正试图使我的python包,Python 3.x 导入python包的内部模块,python-3.x,python-import,python-packaging,Python 3.x,Python Import,Python Packaging,我知道这个问题很可能有重复的地方,所以我提前道歉,因为我花了大量时间挖掘,但一直没能找到它 我正试图使我的python包,svmksalesforce,可安装,以便与同事共享。我正在努力设置我的内部导入,以便它们在安装包时以及在构建/测试包时直接执行包模块时都能工作 例如,为了将myInsert子类化以创建BulkInsert子类,在构建包时,在my bulk\u Insert.py文件中,我有以下导入语句:from Insert import。执行bulk_insert.py(\uuuu na
svmksalesforce
,可安装,以便与同事共享。我正在努力设置我的内部导入,以便它们在安装包时以及在构建/测试包时直接执行包模块时都能工作
例如,为了将myInsert
子类化以创建BulkInsert
子类,在构建包时,在my bulk\u Insert.py文件中,我有以下导入语句:from Insert import
。执行bulk_insert.py(\uuuu name\uuuuu=='\uuuuuu main\uuuu'
)时,该命令执行良好
但是,在安装我的软件包后,当我执行import svmksalesforce时,我收到以下错误:
from insert import Insert
ModuleNotFoundError: No module named 'insert'
完成后,我决定改为从顶级父目录导入,因此我将bulk_query.py中的导入更新为:from svmksalesforce.insert import
此导入结构允许我运行import svmksalesforce
,并允许我与同事共享软件包,但现在当我添加新功能时,我无法再直接执行bulk_query.py。我再次收到一个导入错误:
from svmksalesforce.insert import Insert
ModuleNotFoundError: No module named 'svmksalesforce'
我发现这解释了导入失败的原因,但我似乎找不到一个既能在\uuuuuu name\uuuuu=='\uuuu main\uuuuu'
(直接执行)又能在\uuuuu name\uuuuuuu=='svmksalesforce'
时工作的解决方案(通过导入执行)
现在,当我需要添加新功能时,我正在更新所有导入语句,然后当我需要创建新的sdist时,将它们全部更新回来。每次我再创建一个提交和恢复导入语句时,我的内心都会有一点死亡
我会非常感激任何能帮我减轻痛苦的人
目录结构:
我最终找到了一个似乎有效的解决方案
pip安装-e~/path/to/package
。在本例中,setup.py文件应位于package
文件夹中这允许您随后导入,就好像包目录始终是顶级目录一样。在问题描述中的示例中,我最终使用了svmksalesforce.insert的
“导入插入”
请指定哪个代码示例属于哪个文件。两个导入片段都来自bulk_query.py文件。我在直接在包中执行时使用一种导入语法,在导入包时使用一种导入语法这里没有bulk_query.py文件…哪个IDE?Pycharm?此外,您可能会发现“相对导入路径”的概念很有用:。例如,如果要从共享函数py
访问批量插入
包,可以从.insert.bulk\u插入导入。