python3 import 疑惑

2018-02-08 14:48:20 +08:00
 ve369587

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 为什么不能以项目目录为根节点,根据根节点来查找自定义模块 求大神指教

2890 次点击
所在节点    Python
7 条回复
slgz
2018-02-08 15:04:53 +08:00
难道不是 __init__.py 文件吗
twor
2018-02-08 15:10:56 +08:00
scriptB0y
2018-02-08 16:36:24 +08:00
https://www.kawabangga.com/posts/2340

不过最好的解决办法还是写个 setup.py 打包进去,然后用 python setup.py develop 关联一下。一次打包,到处运行。
jpyl0423
2018-02-08 16:46:29 +08:00
b 可以解决你的问题, 只要你的目录层级不变, 发给别人也是可以直接用的.
jpyl0423
2018-02-08 16:48:22 +08:00
@jpyl0423 #3 当然最好还是按照#2 说的, 打个包.
wisej
2018-02-08 17:39:41 +08:00
为什么要把 main.py 放在 main 文件夹下呢?
直接把 main.py 放在 project 目录下面不就解决了
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 是根据执行的脚本文件所在的路径为根节点”

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

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

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

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

© 2021 V2EX