python导入相关模块

发布于 2024-07-25 03:50:52 字数 219 浏览 6 评论 0原文

我的 Python 模块 a.py 和 b.py 位于同一目录中。 考虑到 a.py 可能是从另一个目录导入或直接执行的,如何可靠地从 a.py 导入 b.py? 该模块将被分发,因此我无法对单个路径进行硬编码。

我一直在玩 __file__、sys.path 和 os.chdir,但感觉很混乱。 并且 __file__ 并不总是可用。

I have the Python modules a.py and b.py in the same directory.
How can I reliably import b.py from a.py, given that a.py may have been imported from another directory or executed directly? This module will be distributed so I can't hardcode a single path.

I've been playing around with __file__, sys.path and os.chdir, but it feels messy. And __file__ is not always available.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡写薰衣草的香 2024-08-01 03:50:52

实际上,__file__ 可用于导入的模块,但前提是它是从 .py/.pyc 文件导入的。 如果模块是内置的,则不可用。例如:

>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False

Actually, __file__ is available for an imported module, but only if it was imported from a .py/.pyc file. It won't be available if the module is built in. For example:

>>> import sys, os
>>> hasattr(os, '__file__')
True
>>> hasattr(sys, '__file__')
False
逆流 2024-08-01 03:50:52

使用 inspect 模块将使内置模块更加明显:

>>> import os
>>> import sys
>>> inspect.getfile(os)
'/usr/local/lib/python2.6/os.pyc'
>>> inspect.getfile(sys)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/inspect.py", line 407, in getfile
    raise TypeError('arg is a built-in module')
TypeError: arg is a built-in module

Using the inspect module will make the builtin modules more obvious:

>>> import os
>>> import sys
>>> inspect.getfile(os)
'/usr/local/lib/python2.6/os.pyc'
>>> inspect.getfile(sys)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/inspect.py", line 407, in getfile
    raise TypeError('arg is a built-in module')
TypeError: arg is a built-in module
南风几经秋 2024-08-01 03:50:52

将包含两者的目录放入您的 python 路径中...或反之亦然。

Put the directory that contains both in your python path... or vice versa.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文