python 新手 关于 import 的问题

2015-11-24 11:06:11 +08:00
 shotego

pkg|
init.py
urllib2.py
main.py
我尝试创建这么一个 pkg,其中包含了 urllib2.py,main.py 。我尝试 import urllib2 ,但是总是会自动识别为我自己创建的 urllib2 。怎么才能使用标准库中的 urllib2 ?

3133 次点击
所在节点    Python
19 条回复
shotego
2015-11-24 11:07:48 +08:00
查了下关于 absolute import 和 relative import ,然而感觉还是一头雾水
leavic
2015-11-24 11:07:56 +08:00
学习一下相对导入和绝对导入的概念
laoyuan
2015-11-24 12:43:08 +08:00
改名
loryyang
2015-11-24 13:06:06 +08:00
jakiepaper
2015-11-24 13:26:27 +08:00
为什么要起个冲突的名字?故意迷惑自己吗...
visaxin
2015-11-24 13:28:19 +08:00
这不是自己挖坑自己跳么
mickeyandkaka
2015-11-24 13:28:20 +08:00
from xxx import xxx as xxx
meloncrashed
2015-11-24 14:40:19 +08:00
读取 module ,先是当前目录,再是环境目录。
改名吧
roychan
2015-11-24 14:42:19 +08:00
大概你需要 __init__.py
martyyyyy
2015-11-24 14:51:42 +08:00
改名
shotego
2015-11-24 14:58:37 +08:00
@leavic 确实查了,然而感觉网上的教程都千篇一律,没有给出我到底该怎么解决这个问题
shotego
2015-11-24 15:00:05 +08:00
@roychan 求详细指导
bbking
2015-11-24 15:01:45 +08:00
添加__init__.py ,另外命名尽量有意义,少冲突
clino
2015-11-24 15:07:10 +08:00
import sys; print sys.path

你调整这里面的值看看,空串这个应该指的是当前目录吧
shotego
2015-11-24 15:13:45 +08:00
@leavic 好吧,其实我就是想通过这里例子试验一下相对导入和绝对导入,但是 from pkg import string 怎么就提示没有 module named string 呢?
roychan
2015-11-24 21:45:14 +08:00
@shotego 在你放程序的目录下新建一个空的 __init__.py ,然后运行 14 楼的命令看看。
shotego
2015-11-24 21:57:39 +08:00
@roychan https://www.v2ex.com/t/238570 可能是我没有描述清楚,请看一下我重发的帖子,谢谢帮忙
stillwater
2015-11-24 22:04:53 +08:00
absolute import 是按 sys.path 里的顺序挨个找的, sys.path[0]是启动 python 解释器的那个脚本文件所在的目录,如果找不到这个文件(比如直接进交互模式)就是一个空字符串,相当于是当前目录。你直接运行 python pkg/main.py 找的是 pkg 文件夹里的 urilib2 ,你 python 进交互模式再 import pkg.main 或者 python -m pkg.main 它会在 pkg 所在的目录找,找不到后会再在 python 的目录里找,找到的是标准库里的 urllib2

你那个 init.py 加不加下划线和这个 import 没啥关系,不过你现在的这个包是个 namespace package ,和普通的不太一样,对你这个测试没啥影响。
shotego
2015-11-25 11:54:52 +08:00
@stillwater 弄懂了,非常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238451

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX