这个算不算 Python 的 BUG?顺便求解决方案。

2015-03-11 20:24:35 +08:00
 invite

写了个模块 a.py 在同一级目录下,有一个配置文件 a.conf

然后a里面是这样读取的: os.path.dirname( os.path.realpath(file) ) + a.conf

然后在另外一个目录里面,有一个 b.py 需要引用 a.py

这个时候,我在 b.py 的目录里,建了一个软连接到 a.py

一开始运行 b.py 没问题

第二次运行 b.py 的时候,说配置文件读取不到了

后来,删除了 b.pyc ,再次运行,还是可以

但只要有 pyc文件以后,停掉运行就找不到配置问了,请问这个是不是 BUG 啊?

py 和 pyc 结果没有一致性呐。

顺便求解决方案:模块如何载入自己的配置文件。

2841 次点击
所在节点    问与答
8 条回复
glasslion
2015-03-11 20:39:29 +08:00
用软链接来做包管理, 脑洞太大
invite
2015-03-11 20:50:48 +08:00
@glasslion 以前用软连接简化了N多操作,这次也想起来试试,结果一开始以为OK了,结果还是有点问题,现在网上搜了下,用 -B 来不让解析器生成 pyc 文件。
glasslion
2015-03-11 21:06:54 +08:00
@invite  早晚还得出事
14
2015-03-11 21:16:21 +08:00
1. 配置文件完全可以用Python写啊就像Django的settings.py,这样很方便导入,功能也强大无数倍
2. 如果你要让a.py获取这个脚本所在的绝对目录,这样写os.path.split(os.path.realpath(__file__))[0]
3. 软链接早晚出事+10086
invite
2015-03-11 21:51:44 +08:00
os.path.split(os.path.realpath(__file__))[0] 这个跟我那个表达的意思,不是一个么?

PS: 正文里 V2EX 自动把双下划线给变成粗体了。

软连接,之前用的,说实话还真好用。
特别各种应用部署升级的时候。超级方便。
只是不知道为什么pyc文件跟py文件执行的语义不一样。
invite
2015-03-11 21:52:52 +08:00
@14 导入配置文件,那不是得把文件都复制到另外一个目录里面去?
14
2015-03-11 22:03:48 +08:00
Sylv
2015-03-12 06:33:53 +08:00
我想是因为第一次运行时: os.path.realpath(__file__) => 原目录的 a.py 的路径 a/a.py
生成 pyc 后:os.path.realpath(__file__) => 新目录的 a.pyc 的路径 b/a.pyc
所以就读取不到 a.conf 了
这不算 Python 的 bug,是你用法不对
实在要用软链接就把 a.conf 也链接过去

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

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

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

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

© 2021 V2EX