“import *”到底导入什么?

在Python中,到底做了什么import *进口?__init__.py在包含的文件夹中找到? 例如是否需要声明from project.model import __init__,或者是from project.model import *充足的? 答案 的"优点"from xyz import *与其他形式的进口不同的是,它进口一切 (好吧,几乎…[参见下面的(a)]所有内容)从当前模块下的指定模块开始。without prefixing them with the module’s name。 >>> from math import * >>>pi 3.141592653589793 >>>sin(pi/2) >>>1.0 This practice (of importing * into the current namespace) is however discouraged因为它 提供了命名空间冲突的机会(假设您在导入之前有一个变量名称 pi) 如果导入的对象数量很大,效率可能会很低 没有明确记录变量/方法/类的起源(最好有程序的"自我文档"以供将来访问代码) 因此,通常我们将这种导入*实践限制为临时测试等。设计的 导入import *。 explicitly import a few objects only >>>from math import pi >>>pi >>>3.141592653589793 >>> sin(pi/2) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sin' is not defined 或者import the module under its own namespace(或其别名,特别是如果这是一个长名称,并且程序多次引用其对象)...

``来自...导入vs'导入。

我想知道代码片段之间是否有任何区别 from urllib import request 和碎片 import urllib.request 或者如果它们可以互换。如果它们是可互换的,那么"标准"/“首选"语法(如果有)? 答案 这取决于您在参考导入时如何访问该导入。 from urllib import request # access request directly. mine = request() import urllib.request # used as urllib.request mine = urllib.request() 当您导入以简单性或避免掩盖内置的INS时,您也可以自己别名: from os import open as open_ # lets you use os.open without destroying the # built in open() which returns file handles. 来自: stackoverflow.com

DJANGO导入错误 - 没有名为Core.Management的模块

好的,我看到了很多这样的错误。我已经尝试了我所知道的一切,但尚未弄清楚这一点。 我正在开发运行Python 2.5和Django 1.3的开发服务器。Django 1.3是使用Python Setup.py安装安装后安装django 1.3。 一切都很好,我很少需要运行manage.py但是,我正在尝试使用新的staticfiles应用程序并遇到问题。 python manage.py collectstatic Traceback (most recent call last): File "manage.py", line 2, in <module> from django.core.management import execute_manager ImportError: No module named core.management 好,所以我有PATH问题。 从Django安装我仔细检查我的site-packages目录。 python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" /usr/lib/python2.5/site-packages 好的,让我们检查一下我拥有的东西,回声$ python_path是空的,所以我设置了 export PYTHON_PATH=/usr/lib/python2.5/site-packages/django 仍然没有运气。让我们检查sys.path必须说的 >>> import sys >>> print sys.path ['', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/PIL', '/usr/lib/python2.5/site-packages/django', '/var/lib/python-support/python2.5'] 路径在那里,我什至创建/usr/lib/python2.5/site-packages/django.pth cat /usr/lib/python2.5/site-packages/django.pth /usr/lib/python2.5/site-packages/django/ 有人了解到这里发生了什么吗? 我发现了一个符合路径的符号链接,但没有新的错误。 python manage....

ModuleNotFoundError:__main__ 不是一个包是什么意思?

我正在尝试从控制台运行模块。 我正在尝试运行该模块p_03_using_bisection_search.py, 来自problem_set_02目录使用: $ python3 p_03_using_bisection_search.py 里面的代码p_03_using_bisection_search.py是: __author__ = 'm' from .p_02_paying_debt_off_in_a_year import compute_balance_after def compute_bounds(balance: float, annual_interest_rate: float) -> (float, float): # there is code here, but I have omitted it to save space pass def compute_lowest_payment(balance: float, annual_interest_rate: float) -> float: # there is code here, but I have omitted it to save space pass def main(): balance = eval(input('Enter the initial balance: ')) annual_interest_rate = eval(input('Enter the annual interest rate: ')) lowest_payment = compute_lowest_payment(balance, annual_interest_rate) print('Lowest Payment: ' + str(lowest_payment)) if __name__ == '__main__': main() 我正在导入一个函数,该函数位于p_02_paying_debt_off_in_a_year....

PyDev 和 Eclipse 未解决的导入问题

我是Pydev和Python的新手,尽管我已经将Eclipse用于Java Funstan。我正在尝试通过一些研究python的例子进行研究,这感觉就像一个非常琐碎的问题,变得非常烦人。我正在使用Ubuntu Linux 10.04。 我希望能够使用位于目录中的文件odbchelper.py/Desktop/Python_Tutorials/diveintopython/py 这是我在pydev/eclipse项目中处理的示例.py文件: import sys sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py") 这很好,但是我希望我的代码的下一行是: import odbchelper 这每次都会导致未解决的导入错误。我已经添加了__init__.py文件几乎所有目录都可能,并且无济于事。我尝试添加__init__.py一次将一个文件归档到项目位置和odbchelper.py文件之间的各个目录,我也尝试添加__init__.py同时向两者之间的所有目录文件文件。两者都没有起作用。 我要做的就是在其他目录中的某个地方设有一个项目,说/Desktop/MyStuff/Project,在其中我有示例。/Desktop/Python_Tutorials/diveintopython/py/ 我可以找到的每个留言板响应,只是说要使用sys.path.append()功能将此目录添加到我的路径中,然后将其导入…但这正是我在代码中所做的事情,并且不起作用。 我也尝试了Ctrl - 1抑制错误消息的技巧,但是程序仍然无法正常运行。我有一个错误,ImportError: No module named odbchelper。因此,显然没有添加路径,或者有一些问题,我添加的所有排列__init__.py文件错过了。 这是简单的东西……从我的机器上其他地方的某些文件中调用东西……需要这么多的努力,这是非常令人沮丧的。 答案 在您的PYDEV项目的属性中,有一个称为" Pydev -Pythonpath"的窗格,带有一个称为"外部库"的子窗格。您可以添加源文件夹(任何具有一个具有的文件夹__init__.py)使用该窗格到达路径。然后,您的项目代码将能够从这些源文件夹导入模块。 来自: stackoverflow.com

Python 3中的相对进口

我想从同一目录中的另一个文件导入函数。 有时对我有用from .mymodule import myfunction但是有时候我得到了: SystemError: Parent module '' not loaded, cannot perform relative import 有时它可以使用from mymodule import myfunction,但有时我也得到一个: SystemError: Parent module '' not loaded, cannot perform relative import 我不了解这里的逻辑,也找不到任何解释。这看起来完全随机。 有人可以向我解释所有这些背后的逻辑是什么? 答案 不幸的是,此模块需要在包装内部,并且有时还需要作为脚本运行。知道我该如何实现这一目标? 很常见的有这样的布局…… main.py mypackage/ __init__.py mymodule.py myothermodule.py …mymodule.py像这样… #!/usr/bin/env python3 # Exported function def as_int(a): return int(a) # Test function for module def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test() …Amyothermodule.py像这样… #!/usr/bin/env python3 from .mymodule import as_int # Exported function def add(a, b): return as_int(a) + as_int(b) # Test function for module def _test(): assert add('1', '1') == 2 if __name__ == '__main__': _test() …还有一个main....

Python ImportError:无法导入名称实用程序

我在运行脚本时遇到此问题,它看起来缺少一些依赖项,但如下所示。 [ericfoss@maverick-fossum-ddns-net packages]$ python -c "import utils" [ericfoss@maverick-fossum-ddns-net packages]$ python -c "import requests" Traceback (most recent call last): File "<string>", line 1, in <module> File "/usr/lib/python2.7/site-packages/requests/__init__.py", line 64, in <module> from . import utils ImportError: cannot import name utils [ericfoss@maverick-fossum-ddns-net packages]$ 知道为什么吗utils可以导入,但是requests不能? 答案 嗯,之后pip uninstall requests并重新安装,它不再起作用了。dnf install python-requests解决了整个问题… 来自: stackoverflow.com

Python 中的循环导入依赖

假设我有以下目录结构: a\ __init__.py b\ __init__.py c\ __init__.py c_file.py d\ __init__.py d_file.py 在里面a包的__init__.py, 这c包已导入。c_file.py进口a.b.d。 程序失败,说b不存在时c_file.py尝试导入a.b.d。 如何解决这个问题? 答案 如果a依赖于c并且c依赖于a,那么它们实际上不是同一个单位吗? 您应该真正检查为什么将 a 和 c 拆分为两个包,因为您应该将一些代码拆分到另一个包中(以使它们都依赖于该新包,但不依赖于彼此),或者您应该合并它们 来自: stackoverflow.com

Python:相对于当前运行脚本添加到SYS.Path的最佳方法

我有一个装满脚本的目录(例如project/bin)。我也有一个位于project/lib并希望脚本自动加载它。这是我通常在每个脚本顶部使用的方法: #!/usr/bin/python from os.path import dirname, realpath, sep, pardir import sys sys.path.append(dirname(realpath(__file__)) + sep + pardir + sep + "lib") # ... now the real code import mylib 这有点麻烦,丑陋,必须在每个文件的开头粘贴。有一个更好的方法吗? 确实,我希望的是这样的顺利: #!/usr/bin/python import sys.path from os.path import pardir, sep sys.path.append_relative(pardir + sep + "lib") import mylib 甚至更好的是,当我的编辑(或已提交访问权限的其他人)决定将导入物重新排序作为其清理过程的一部分时,它不会破裂的事情: #!/usr/bin/python --relpath_append ../lib import mylib 这不会直接移植到非Posix平台,但可以使情况保持清洁。 答案 如果您不想编辑每个文件 像普通Python库一样安装图书馆 或者 放PYTHONPATH给你lib 或者,如果您愿意在每个文件中添加一行,请在top中添加导入语句。 import import_my_lib 保持import_my_lib.py在垃圾箱和import_my_lib可以正确设置Python的路径lib你要 来自: stackoverflow.com

PythonPath vs.Sys.Path

另一个开发人员和我不同意是否PYTHONPATH或者sys.path应使用允许Python在用户(例如开发)目录中找到Python软件包。 我们有一个具有典型目录结构的Python项目: Project setup.py package __init__.py lib.py script.py 在script.py中,我们需要做import package.lib。将软件包安装在网站包装中时,script.py可以找到package.lib。 但是,从用户目录工作时,需要做其他事情。我的解决方案是设置我的PYTHONPATH包括"~/Project"。另一个开发人员想将此代码行放在脚本的开头。 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) 因此,Python可以找到package.lib。 我认为这是一个坏主意,因为这一行仅对开发人员或从本地副本运行的人有用,但是我不能很好地说明这是一个坏主意。 我们应该使用PYTOHNPATH,,,,sys.path,还是很好? 答案 如果修改路径的唯一原因是用于从工作树工作的开发人员,那么您应该使用安装工具为您设置环境。Virtualenv非常受欢迎,如果您使用的是setuptools,则可以简单地运行setup.py develop要在当前的Python安装中半插入工作树。 来自: stackoverflow.com

python错误“ Importerror:no模块名称”

Python安装在本地目录中。 我的目录树看起来像这样: (local directory)/site-packages/toolkit/interface.py 我的代码在这里: (local directory)/site-packages/toolkit/examples/mountain.py 要运行示例,我写python mountain.py,在代码中: from toolkit.interface import interface 我得到了错误: Traceback (most recent call last): File "mountain.py", line 28, in ? from toolkit.interface import interface ImportError: No module named toolkit.interface 我已经检查了sys.path在那里我有目录/site-packages。另外,我有文件__init__.py.bin在工具箱文件夹中,向Python表示这是一个软件包。我也有一个__init__.py.bin在示例目录中。 我不知道为什么Python在该文件中找到该文件sys.path。有任何想法吗?可以是权限问题吗?我需要一些执行许可吗? 答案 根据您对Orip帖子的评论,我想这就是发生的事情: 您编辑__init__.py在窗户上。 Windows编辑器添加了一些非打印的东西,也许是一个退货(Windows中的末端是CR/LF;在Unix中仅是LF),或者也许是Ctrl-Z(Windows funfile)。 您使用WINSCP将文件复制到您的UNIX框。 Winscp认为:“这不是基本文本;我将放置一个.bin扩展名来指示二进制数据。” 失踪__init__.py(现在叫__init__.py.bin)表示Python不将工具包视为包装。 您创建__init__.py在适当的目录中,一切都起作用…? 来自: stackoverflow.com

python项目中使用相对路径读取文件

假设我有一个 python 项目,其结构如下: project /data test.csv /package __init__.py module.py main.py __init__.py: from .module import test module.py: import csv with open("..data/test.csv") as f: test = [line for line in csv.reader(f)] main.py: import package print(package.test) 当我跑步时main.py我收到以下错误: C:\Users\Patrick\Desktop\project>python main.py Traceback (most recent call last): File "main.py", line 1, in <module> import package File "C:\Users\Patrick\Desktop\project\package\__init__.py", line 1, in <module> from .module import test File "C:\Users\Patrick\Desktop\project\package\module.py", line 3, in <module> with open("../data/test.csv") as f: FileNotFoundError: [Errno 2] No such file or directory: '....

尝试从导入的包导入模块时出现“ModuleNotFoundError”

这是我的目录结构: man/ Mans/ man1.py MansTest/ SoftLib/ Soft/ SoftWork/ manModules.py Unittests/ man1test.py man1.py包含以下内容进口 陈述,which I do not want to change: from Soft.SoftWork.manModules import * man1test.py包含以下内容进口声明: from ...MansTest.SoftLib import Soft from ...Mans import man1 我需要第二个进口 在man1test.py因为man1test.py需要访问一个函数man1.py。 我第一次导入背后的理由(柔软的 )是为了促进上述进口 中的声明man1.py。 然而,与我的预期相反,进口 中的声明man1.py产生: ModuleNotFoundError: No module named 'Soft' 当我跑步时 python3 -m man.MansTest.Unittests.man1test 从上面的目录男人/。 有没有什么办法可以在不改变的情况下解决这个错误进口 中的声明man1.py and 不添加任何东西系统路径? 编辑:python3 -m man.ManTest.Unittests.man1test从问题的原始版本改为python3 -m man.MansTest.Unittests.man1test 答案 FIRST ,如果您希望能够访问人1.py 从man1test.py 和manModules.py 从人1.py ,您需要正确设置您的文件包和模块。 包是一种使用"点分模块名称"来构建 Python 模块命名空间的方法。A.B指定一个名为的子模块B在一个名为A。 … 导入包时,Python 会搜索以下目录sys....

尝试相对导入的,没有已知的父套件

from ..box_utils import decode, nms 这条线给error Importerror:尝试相对导入的,没有已知的父套件 这个错误是什么,如何解决此错误? 答案 显然,box_utils.py不是包裹的一部分。您仍然可以导入此文件中定义的函数,但前提是试图导入这些函数的Python脚本与box_utils.py, 看这个答案。 Nota Bene:就我而言,我以一个时期的导入语句偶然发现了这个错误,例如:from .foo import foo。但是,这种语法告诉Pythonfoo.py是软件包的一部分,情况并非如此。当我删除期间时,错误消失了。 来自: stackoverflow.com

从__future __导入absolute_import实际上会做什么?

我有回答关于Python中绝对进口的问题,我认为我根据阅读理解了这一点Python 2.5 ChangElog以及伴随的PEP。但是,安装Python 2.5并试图正确使用的示例from __future__ import absolute_import,我意识到事情并不是那么清楚。 直接从上面链接的变形值中,该声明准确地总结了我对绝对导入变化的理解: 假设您有这样的包装目录: pkg/ pkg/__init__.py pkg/main.py pkg/string.py 这定义了一个名为的软件包pkg含有pkg.main和pkg.string子模型。 考虑Main.py模块中的代码。如果执行语句会发生什么import string?在Python 2.4和更早的时候,它将首先在包装的目录中进行相对导入,找到pkg/string.py,将该文件的内容导入为pkg.string模块,该模块绑定到名称"string"在里面pkg.main模块的名称空间。 因此,我创建了这个确切的目录结构: $ ls -R .: pkg/ ./pkg: __init__.py main.py string.py __init__.py和string.py是空的。main.py包含以下代码: import string print string.ascii_uppercase 正如预期的那样,使用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: 'module' object has no attribute 'ascii_uppercase' 但是,在2.5 ChangElog中,我们发现了这一点(添加了强调): 在Python 2.5中,您可以切换import使用一个from __future__ import absolute_import指示。这种绝对的进象行为将成为未来版本的默认值(可能是Python 2.7)。Once absolute imports are the default, import string will always find the standard library’s version....