相关疑难解决方法(0)

从__future__导入absolute_import实际上做了什么?

我已经回答了一个关于Python绝对导入的问题,我认为我在阅读Python 2.5更新日志和随附的PEP时理解了这一点.但是,在安装Python 2.5并尝试制作正确使用的示例时from __future__ import absolute_import,我意识到事情并不那么清楚.

直接从上面链接的更改日志,这句话准确地总结了我对绝对导入更改的理解:

假设你有一个像这样的包目录:

pkg/
pkg/__init__.py
pkg/main.py
pkg/string.py
Run Code Online (Sandbox Code Playgroud)

这定义了一个名为pkg包含pkg.mainpkg.string子模块的包.

考虑main.py模块中的代码.如果它执行语句会发生什么import string?在Python 2.4和更早的版本,它会先在包的目录进行相对进口看,发现包装/ string.py,导入该文件的内容pkg.string模块,并且该模块被绑定到名字"string"pkg.main模块的名称空间.

所以我创建了这个确切的目录结构:

$ ls -R
.:
pkg/

./pkg:
__init__.py  main.py  string.py
Run Code Online (Sandbox Code Playgroud)

__init__.py并且string.py是空的.main.py包含以下代码:

import string
print string.ascii_uppercase
Run Code Online (Sandbox Code Playgroud)

正如所料,使用Python 2.5运行它失败了AttributeError:

$ python2.5 pkg/main.py
Traceback (most recent call last):
  File "pkg/main.py", line 2, in <module>
    print string.ascii_uppercase
AttributeError: …
Run Code Online (Sandbox Code Playgroud)

python python-2.5 python-import python-2.7

139
推荐指数
2
解决办法
8万
查看次数

如何在Python 3中创建包?ModuleNotFoundError

我按照Python Central上的简易指南为我的代码创建一个包:

https://www.pythoncentral.io/how-to-create-a-python-package/

所以我的目录结构是:

main.py
pack1/
         __init__.py
         Class1.py
Run Code Online (Sandbox Code Playgroud)

main.py我导入和使用的文件Class1中:

from pack1 import Class1
var1 = Class1()
Run Code Online (Sandbox Code Playgroud)

__init__.py我写的文件中:

import Class1 from Class1
Run Code Online (Sandbox Code Playgroud)

我完全按照指南,仍然得到错误:

ModuleNotFoundError: No module named 'Class1' (in __init__.py)
Run Code Online (Sandbox Code Playgroud)

python packages python-3.x

7
推荐指数
1
解决办法
4638
查看次数

尝试使用 __init__.py 在没有已知父包的情况下进行相对导入

以下是我的项目的结构:

\n
Python_Projects/\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 project_1/\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_functions.py\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.py\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 sub_folder_add/\n                \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 add.py\n
Run Code Online (Sandbox Code Playgroud)\n

add.py中的代码:

\n
from .my_functions import addition\n
Run Code Online (Sandbox Code Playgroud)\n

运行code.py时出现错误:

\n
\n

ImportError:尝试在没有已知父包的情况下进行相对导入

\n
\n

python python-import importerror python-3.x

4
推荐指数
1
解决办法
2万
查看次数