首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pylint和python <tool>在包的相对导入方面发生冲突(如果我用pylint的方式运行,没有名为< package >的模块)

Pylint和python <tool>在包的相对导入方面发生冲突(如果我用pylint的方式运行,没有名为< package >的模块)
EN

Stack Overflow用户
提问于 2020-09-14 09:42:30
回答 1查看 118关注 0票数 1

我已经检查了我的问题是否在其他地方得到了回答,但我发现两个问题(Can anyone explain python's relative imports?Python gives relative import error for package?)看上去与我的问题最相似,但并没有回答我的问题。我还使用以下搜索查询进行搜索:“没有名为package.module的模块”)。

我正在开发一个包,它既可以作为工具使用,也可以被其他脚本导入。因此,我以以下方式设置了它:

代码语言:javascript
复制
/<package_name>/__init__.py # to be able to import it by other scripts
               /__main__.py # to be able to use it 'live' as tool
               /<modules.py>

最初,我将__main__.py和模块设置为pylint所需的:以“模拟”__main__.py为例:

代码语言:javascript
复制
import package_name.module1 as module1
import package_name.module2 as module2

def main(arg_list=None):
    module1.somefunction()
    module2.somefunction()

if __name__ == '__main__':
    main()

但是,当我执行此操作时,会得到以下错误(即使在__main__.py中):

代码语言:javascript
复制
No module named package_name.module1

如果我将package_name从导入的执行工作中删除,那么pylint就会开始抱怨:

代码语言:javascript
复制
__main__.py: 1: [W0403(relative-import), ] Relative import 'module1', should be 'package_name.module1'
__main__.py: 2: [W0403(relative-import), ] Relative import 'module2', should be 'package_name.module2'

我已经尝试过from package_name import module1,但在执行代码时也会出现同样的错误。

我应该做些什么来修复它,使pylint和工具执行都接受相同的代码(更好的方法是导入,因为pylint想要它)。

编辑:为了清楚起见:我工作的公司目前仍然使用Python2.7,但是我们通过使用Python3打印语句和类似的(from __future__ import <python3 functionality>)使代码python3兼容。

(注意:__init__.py只导入__main__.py并调用main(),在执行import package_name.__main__时没有给出问题)

EN

回答 1

Stack Overflow用户

发布于 2020-09-15 09:29:53

密码在我看来没问题。通常,这类问题归结为找出了调用代码的正确方法。在这种情况下,您可能需要确保这样称呼它:python -m package_name,并且Python应该自动找到并运行package_name/__main__.py

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63881853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档