如何从当前非默认目录导入模块

0 投票
3 回答
8308 浏览
提问于 2025-04-16 20:49

我正在使用Python 2.7,刚接触这个语言。现在我有两个Python模块,一个叫“Trailcrest.py”,另一个叫“Glyph.py”,它们都在同一个文件夹里,但不在Python27的文件夹里。

我想在“Glyph.py”中导入“Trailcrest.py”,但是系统提示“没有这个模块”。

另外,我用来导入模块的方法不能依赖于固定的路径。因为这个程序是跨平台的,路径可能会根据用户的设置而改变。不过,这两个模块总是会在同一个文件夹里。

我该怎么做呢?

3 个回答

1

这也可以通过使用环境变量 PYTHONPATH 来实现,它会影响 Python 查找文件的路径。你可以在一个脚本中设置这个变量,这样就不需要修改 Python 文件了。如果你想让 Python 从当前工作目录导入文件,可以在 bash 中使用 . 这个符号:

export PYTHONPATH=.
python python_prog.py
2

为了更详细地解释一下Ferdinand Beyer的回答sys.path其实是一个文件位置的列表,默认的模块导入器会检查这些位置。虽然并不是所有的Python安装都会把当前目录或者__main__模块所在的目录加入到这个列表中,但有些会这样做。为了确保在某个模块中相对路径是可以被导入的,可以像这样操作:

import os.path, sys
sys.path.append(os.path.dirname(__file__))

不过,像这样的做法不应该用于“生产”环境。相反,应该使用distutils来将模块的包安装到Python的site-packages目录中。

3

如果你的文件夹里有 Trailcrest.pyGlyph.py 这两个文件,把一个文件导入到另一个文件里非常简单,只需要这样做:

import Trailcrest
import Glyph

如果这样做不成功,那可能是你的 Python 设置有问题。你可以检查一下 sys.path 里有什么内容。

import sys
print sys.path

撰写回答