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
ve369587
V2EX  ›  Python

python3 import 疑惑

  •  
  •   ve369587 · 2018-02-08 14:48:20 +08:00 · 3101 次点击
    这是一个创建于 2513 天前的主题,其中的信息可能已经有所发展或是发生改变。

    win 操作系统

    目录结构如下: project |--modu |--init.py |--moduA.py |--main |--main.py

    main.py 想引用 moduA,现在网上解决方法: a.Python 安装目录下的\Lib\site-packages 文件夹中建立一个.pth 文件,内容为自己写的库路径 b.动态的添加库路径。在程序运行过程中修改 sys.path 的值,添加自己的库路径

    疑惑: a.无论是 a 还是 b 解决的都是自己本机上引包的问题。如果把写的项目发个别人,别人岂不是还要再配置一遍? b.python 为什么不能以项目目录为根节点,根据根节点来查找自定义模块 求大神指教

    7 条回复    2018-02-09 16:28:52 +08:00
    slgz
        1
    slgz  
       2018-02-08 15:04:53 +08:00
    难道不是 __init__.py 文件吗
    twor
        2
    twor  
       2018-02-08 15:10:56 +08:00
    scriptB0y
        3
    scriptB0y  
       2018-02-08 16:36:24 +08:00
    https://www.kawabangga.com/posts/2340

    不过最好的解决办法还是写个 setup.py 打包进去,然后用 python setup.py develop 关联一下。一次打包,到处运行。
    jpyl0423
        4
    jpyl0423  
       2018-02-08 16:46:29 +08:00
    b 可以解决你的问题, 只要你的目录层级不变, 发给别人也是可以直接用的.
    jpyl0423
        5
    jpyl0423  
       2018-02-08 16:48:22 +08:00
    @jpyl0423 #3 当然最好还是按照#2 说的, 打个包.
    wisej
        6
    wisej  
       2018-02-08 17:39:41 +08:00
    为什么要把 main.py 放在 main 文件夹下呢?
    直接把 main.py 放在 project 目录下面不就解决了
    vimiix
        7
    vimiix  
       2018-02-09 16:28:52 +08:00
    python 是以你执行的文件为根节点的,引用的模块或包不能超过根节点。写 django 的话,应该就了解这点,我们启动 django 都是去执行根目录下的 manage.py 。 所以项目内的文件可以相互引用。

    根节点下面的文件树可以看做是一个项目,他们之间可以通过从根节点路径出发的绝对路径来引用,这也是 Python 推荐的写法。
    理解引用的原理以后,就很简单了

    翻译过一篇关于引用的文章。可以参考一下: http://vimiix.com/post/2017/12/29/import-error-relative-no-parent
    我之前也困扰过一段时间,理解一句话就可以了:“ Python 是根据执行的脚本文件所在的路径为根节点”
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:33 · PVG 14:33 · LAX 22:33 · JFK 01:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.