V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
? Learn Python the Hard Way
Python Sites
? PyPI - Python Package Index
? http://diveintopython.org/toc/index.html
? Pocoo
值得关注的项目
? PyPy
? Celery
? Jinja2
? Read the Docs
? gevent
? pyenv
? virtualenv
? Stackless Python
? Beautiful Soup
? 结巴中文分词
? Green Unicorn
? Sentry
? Shovel
? Pyflakes
? pytest
Python 编程
? pep8 Checker
Styles
? PEP 8
? Google Python Style Guide
? Code Style from The Hitchhiker's Guide
shotego
V2EX  ?  Python

python 新手 关于 import 的问题

  •  
  •   shotego · 2015-11-24 11:06:11 +08:00 · 2953 次点击
    这是一个创建于 3089 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

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

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

    你调整这里面的值看看,空串这个应该指的是当前目录吧
    shotego
        15
    shotego  
    OP
       2015-11-24 15:13:45 +08:00
    @leavic 好吧,其实我就是想通过这里例子试验一下相对导入和绝对导入,但是 from pkg import string 怎么就提示没有 module named string 呢?
    roychan
        16
    roychan  
       2015-11-24 21:45:14 +08:00
    @shotego 在你放程序的目录下新建一个空的 __init__.py ,然后运行 14 楼的命令看看。
    shotego
        17
    shotego  
    OP
       2015-11-24 21:57:39 +08:00 via iPhone
    @roychan /t/238570 可能是我没有描述清楚,请看一下我重发的帖子,谢谢帮忙
    stillwater
        18
    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
        19
    shotego  
    OP
       2015-11-25 11:54:52 +08:00
    @stillwater 弄懂了,非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3138 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:50 · PVG 22:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com