我有一个名为"calendar"的本地目录,其中包含"__init__.py"文件.
我希望"导入日历"导入标准库模块日历,而不是我本地目录定义的模块.
我已经尝试过"从__future__ import absolute_import"并改变PYTHONPATH.
有很好的理由我不能只重命名目录.真.
版本3.4.6和3.5.2之间的Python导入阴影似乎不同:
$ cat time.py
from time import time
$ pyenv global 3.4.6
$ python -V
Python 3.4.6
$ python time.py
Traceback (most recent call last):
File "time.py", line 1, in <module>
from time import time
File "/home/vagrant/tmp/time.py", line 1, in <module>
from time import time
ImportError: cannot import name 'time'
$ pyenv global 3.5.2
$ python -V
Python 3.5.2
$ python time.py
$ echo no error
no error
Run Code Online (Sandbox Code Playgroud)
问题1:为什么......那些东西?
问题2:更新日志中有什么内容吗?我找不到任何东西......
我真的希望这是一个简单的例子,让我想念复杂的Python2导入机制.我有以下设置:
$> ls -ltr pypackage1
total 3
-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 io.py
-rw-r--r-- 1 pelson pelson 0 Aug 17 19:20 __init__.py
-rw-r--r-- 1 pelson pelson 57 Aug 17 19:22 code.py
$> cat pypackage1/code.py
from __future__ import absolute_import
import zipfile
Run Code Online (Sandbox Code Playgroud)
即我只是一个存根包空__init__.py和io.py和2号线code.py的文件.
我可以导入pypackage1:
$> python -c "import pypackage1.code"
Run Code Online (Sandbox Code Playgroud)
但我无法运行该code.py文件:
$> python pypackage1/code.py
Traceback (most recent call last):
File "pypackage1/code.py", line 3, in <module>
import zipfile
File "python2.7/zipfile.py", line …Run Code Online (Sandbox Code Playgroud) 我math最近经常使用这个模块.我不想写math.sqrt(x)和math.sin(x)所有的时间.我想缩短它并写sqrt(x)和sin(x).怎么样?
我想将日志记录https://docs.python.org/3/library/logging.html导入到名为 logging.py 的文档中。但是,当我尝试导入 logging.handlers 时,它失败了,因为我相信它是在文档中搜索处理程序函数,而不是从模块中导入。我该如何解决这个问题,以便它查找更高级别的日志记录而不是查看文件内部?
我在“ msa”命名空间下组织了许多小型utils模块,因此可以在许多不同的研究项目中使用。目前,我将它们组织成这样:
# folder structure:
packages <-- in my pythonpath
--msa
----msa_utils.py
----msa_geom.py
----msa_pyglet.py
----msa_math.py
----etc
# imported and used this like
from msa import msa_pyglet
from msa import msa_math
msa_pyglet.draw_rect(msa_math.lerp(...))
Run Code Online (Sandbox Code Playgroud)
但是,我想避免名称中的“ msa_”,而是这样使用:
# folder structure:
packages <-- in my pythonpath
--msa
----utils.py
----geom.py
----pyglet.py
----math.py
----etc
# imported and used this like
import msa.pyglet
import msa.math
msa.pyglet.draw_rect(msa.math.lerp(...))
Run Code Online (Sandbox Code Playgroud)
从外部导入时,这不会引起名称冲突,但是,当模块本身导入名称冲突的模块时,就会发生名称冲突。例如,msa / pyglet需要导入pyglet(外部的),但最终尝试导入自身。同样,任何尝试导入标准数学库的模块都只会导入我的数学模块。这都是可以理解的。但是,处理这种问题的常用pythonic方法是什么?我必须给每个模块文件一个全局唯一的名称吗?
当我在Ideone中复制以下代码时,它可以正常运行,但未在文本编辑器中运行,并显示了本文中提到的错误:
import calendar
c = calendar.TextCalendar(calendar.SUNDAY)
c.prmonth(2007, 7)
Run Code Online (Sandbox Code Playgroud)
完整的错误是:
Traceback (most recent call last):
File "calendar.py", line 1, in <module>
import calendar
File "/home/shl/Desktop/calendar.py", line 2, in <module>
c = calendar.TextCalendar(calendar.SUNDAY)
AttributeError: 'module' object has no attribute 'TextCalendar'
Run Code Online (Sandbox Code Playgroud)