如何在python 3.6中使用绝对导入和相对导入?

乔诺诺莫

我有一个名为“ slingshot”的python项目/库,具有以下目录结构:

slingshot/
    __init__.py
    __main__.py
    build.py
    deploy.py
    util/
        __init__.py
        prepare_env.py
        cdn_api.py

__main__.py我想从导入功能util/prepare_env.py

我想确保util引用的是util我在项目中拥有的,而不是其他util可能安装在某处的库。

我尝试过,from .util import prepare_env但出现错误。

from util import prepare_env 似乎有效,但并未解决“ u​​til”的歧义。

我究竟做错了什么?


__main__.py 如下:

import os
from .util import prepare_env

if __name__ == '__main__':
    if 'SLINGSHOT_INITIALIZED' not in os.environ:
        prepare_env.pip_install_requirements()
        prepare_env.stub_travis()
        prepare_env.align_branches()
        os.environ['SLINGSHOT_INITIALIZED'] = 'true'

当我键入时python3 ./slingshot,出现以下错误:

  File "./slingshot/__main__.py", line 2, in <module>
    from .util import prepare_env
ImportError: attempted relative import with no known parent package

当我键入时python3 -m ./slingshot,出现以下错误:

/usr/local/opt/python3/bin/python3.6: Relative module names not supported
马丁·彼得斯(Martijn Pieters)

__main__.py使用-m命令行开关时,程序包中的模块会使模块作为脚本运行该开关采用模块名称,而不是路径,因此请删除./前缀:

python3 -m slingshot

当前工作目录被添加到模块搜索路径的开头,因此slingshot首先找到它,而无需在此处给出相对路径说明。

-m交换机文档中

搜索sys.path指定的模块,并执行其内容作为__main__模块。

由于自变量是模块名称,因此不能给文件扩展名(.py)。模块名称应为有效的绝对Python模块名称[。]

[...]

与该-c选项一样,当前目录将添加到的开头sys.path

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python 3中使用绝对导入来导入位于其父目录中的包?

python3 grpc编译器:如何处理.protos中的绝对和相对导入?

如何在带有if __name __ ='__ main__'块的Python3中使用相对导入?

如何在Python 3中执行动态相对导入?

Python 3中的相对导入

相对导入和Python 3的问题

如何在python3中使用ctypes导入ostringstream?

如何在绝对导入中设置不带点号的Pypi软件包-Python3

您可以在python中同时使用相对和绝对导入吗?

Python模块的绝对导入和相对导入:matplotlib示例

在Ubuntu上的Python 3中使用Pip和导入包

如何在角度6中将相对导入转换为绝对值?

Python 3“ Sideways”相对导入

使用Python 3从Jupyter Notebook中相对导入的另一个目录中的模块导入本地函数

如何在python3中导入mysqlclient

从包中的脚本进行Python 3绝对导入的问题

Python 3中的相对导入不起作用

为什么相对导入在Python 3中不起作用?

如何在Python3中列出导入的模块和版本

如何在Xcode 12 beta 3中使用Swift成功导入AVFoundation?

如何在python中设置相对导入?

如何在Spyder 3中使用Python 3?

Python模块的绝对和显式相对导入

如何在Expo和React Native中使用绝对路径导入?

科学堆栈存储库中的Python相对vs绝对导入

在使用ParcelJS构建的Cypress测试中,如何在绝对路径中使用导入?

如何在virtualenv中使用python 2和3

如何在python的csv中导入3D表?

如何在首次导入时修补Python 3模块?