我想知道 - 人们如何处理在django视图中导入大量常用模块?最有效的方法是什么?
比如,我有一些观点,比如
admin_views.py
search_views.py
.
.
Run Code Online (Sandbox Code Playgroud)
从我所看到的,他们每个人都需要使用HttpResponse或其他常用的模块.此外,他们中的一些人需要像BeautifulSoup这样的东西,而其他人则需要其他东西(md5,auth等).
我在启动项目时所做的是创建一个include_all.py包含大部分常见导入的内容,然后在视图中添加这些特定内容.所以,我有类似的东西,
admin_views.py
from include_all import *
...
[list of specific module imports for admin]
...
Run Code Online (Sandbox Code Playgroud)
search_views.py
from include_all import *
...
[list of specific module imports for search]
...
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,include_all成为一个misc文件,其中包含任何需要的东西 - 因此,许多视图最终导入了他们不需要的模块.
这会影响效率吗?也就是说,python(django?)是否导入所有模块一次并存储/缓存它们,以便需要它们的任何其他视图不必再次导入它?或者我调用这个长文件的方法效率很低 - 我最好坚持在每个视图中单独导入这些模块?
对于这类事情有没有最佳做法?
谢谢!
我已经为Python 2.6.1的一些同事的Mac OSX编写了一个实用程序脚本.由于它们没有安装所有必需的模块,我有一个try-except import子句:
try:
import argparse
except ImportError:
print "argparse module missing: Please run 'sudo easy_install argparse'"
sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
我很确定有更优雅的方法来处理这个问题.有任何想法吗?
我正在尝试使用是否可以列出模块中的所有函数的答案?列出一系列模块中的功能。但在我的口译员中,我得到如下:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (In
tel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect
>>> import math
>>> math.pow(5,4)
625.0
>>> inspect.getmembers(math, inspect.isfunction)
[]
>>> inspect.getmembers(inspect, inspect.isfunction)
[('_check_class', <function _check_class at 0x00C9F9C0>), ('_check_instance', <f
unction _check_instance at 0x00C9F978>), ('_get_user_defined_method', <function
_get_user_defined_method at 0x00C9FB70>), ('_getfullargs', <function _getfullarg
s at 0x00C6A4F8>), ('_is_type', <function _is_type at 0x00C9FA08>), ('_missing_a
rguments', <function _missing_arguments at 0x00C9F198>), ('_shadowed_dict', <fun …Run Code Online (Sandbox Code Playgroud) 可能我的问题很明显,但我找不到明显的决定。
有 Python 2.6+ 扩展名为audit和auparse。这些是与audit-libs-python包一起分发的动态库:
[vitaly@thermaltake tmp]$ repoquery -lq audit-libs-python
/usr/lib64/python2.7/site-packages/_audit.so
/usr/lib64/python2.7/site-packages/audit.py
/usr/lib64/python2.7/site-packages/audit.pyc
/usr/lib64/python2.7/site-packages/audit.pyo
/usr/lib64/python2.7/site-packages/auparse.so
Run Code Online (Sandbox Code Playgroud)
我想在最新的 Python 解释器中使用这个扩展,因为怀疑在 python 2.6+ 中对动态内存的处理不正确。出于某种原因,我无法从 Python 3.3 加载它们:
[vitaly@thermaltake ~]$ python3.3
Python 3.3.2 (default, Mar 5 2014, 08:21:05)
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/usr/lib64/python2.7/site-packages/")
>>> import auparse
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /usr/lib64/python2.7/site-packages/auparse.so: …Run Code Online (Sandbox Code Playgroud) 我无法理解在 '__init__.py' 中声明的对象是/应该如何导入到其他文件中。
我有一个像这样的目录结构
top/
|
|_lib/
|_ __init__.py
|_ one.py
Run Code Online (Sandbox Code Playgroud)
文件内容如下
库/__init__.py
a=object()
Run Code Online (Sandbox Code Playgroud)
库/一个.py
from lib import a
Run Code Online (Sandbox Code Playgroud)
这是问题所在。如果我从top目录中触发 python shell ,则以下命令运行良好
>>> from lib.one import a
Run Code Online (Sandbox Code Playgroud)
但是,如果我将目录更改为top/lib并在新的 python shell 中触发类似的命令,则会出现错误。
>>> from one import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "one.py", line 1, in <module>
from lib import a
ImportError: No module named lib
Run Code Online (Sandbox Code Playgroud)
当然,我可以这样改变one.py,这将使一切正常。
from __init__ import a
Run Code Online (Sandbox Code Playgroud)
但我真的很想理解,为什么 import 命令是从top目录而不是从top/lib …
我想开始研究 Python 中的分数模块。我使用 Atom 编辑器和包“脚本”来从编辑器运行模块。所以,我在尝试制作简单的分数对象时遇到了这个错误:
AttributeError: 模块“分数”没有属性“分数”
代码:
import fractions
f = fractions.Fraction(3, 4) + 1 + 1.5
print(f)
Run Code Online (Sandbox Code Playgroud)
怎么了?Python解释器可以毫无问题地使用它。
我为NLTK的对齐模块得到一个奇怪的导入错误:
$ python2 --version
Python 2.7.10
$ pip2 freeze | grep nltk
nltk==3.2
$ python2
Python 2.7.10 (default, Oct 23 2015, 18:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> from nltk.align import AlignedSent
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named align
Run Code Online (Sandbox Code Playgroud)
如您所见,我为python 2.7安装了nltk 3.2.我可以nltk直接导入.但是,我无法访问该align模块.
我知道我使用的import语句是正确的,因为我直接从官方文档中获取它.另外,我查看了从NLTK 2到NLTK 3的接口更改,并没有提到该align模块. …
我正在读PEP338.有些话困惑我:
如果找到模块,并且是类型 PY_SOURCE或PY_COMPILED,然后在命令行被有效地从重新解释
python <options> -m <module> <args>到python <options> <filename> <args>.
模块在Python中有类型吗?
我有一个目录结构如下的项目
.
??? Pipfile
??? Pipfile.lock
??? module
? ??? __init__.py
? ??? helpers
? ? ??? __init__.py
? ? ??? __pycache__
? ? ? ??? __init__.cpython-36.pyc
? ? ??? dynamo.py
? ? ??? logger.py
? ??? test.py
Run Code Online (Sandbox Code Playgroud)
相关代码
logger.py
import click
import sys
from tabulate import tabulate
def formatter(string, *rest):
return string.format(*rest)
def info(*rest):
"""Write text in blue color
"""
click.echo(click.style('? ' + formatter(*rest), fg='blue'))
Run Code Online (Sandbox Code Playgroud)
test.py
import helpers
helpers.logger.info('Trying')
Run Code Online (Sandbox Code Playgroud)
当我尝试使用命令运行
python3 module/test.py
Run Code Online (Sandbox Code Playgroud)
我得到这个错误
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 我正在阅读官方的Python教程,它说
一个特定的模块值得注意:sys,它内置于每个Python解释器中.
但是,如果我启动python解释器并输入,例如sys.path,我得到了一个NameError: name sys is not defined.
因此,sys如果我想要访问它,我需要导入.
那么它是什么意思"它内置于每个python解释器中"?
python ×10
python-module ×10
python-3.x ×2
atom-editor ×1
built-in ×1
django ×1
import ×1
inspect ×1
linux ×1
macos ×1
module ×1
nltk ×1
performance ×1
pipenv ×1