导入自己编写的Python模块

3

我已经阅读了许多与此相关的其他S-O问题,但仍然无法使其对我起作用。提前道歉,如果有重叠!我正在使用Windows 7上的Python 2.7.10。

我正在尝试在PyCharm的Python控制台中导入我编写的模块(我怀疑这并不重要)。在控制台中,我导航到包含我的模块的目录:

/users/usn/.../Tools/my_file.py

您可以使用pwd命令进行确认。然后我尝试...

import my_file

但是出现了 ImportError: No module named my_file 的错误。我尝试了很多变化但都无济于事。如何在控制台中导入我写的模块?

谢谢


你确定在运行解释器时你在Tools目录下吗?你能否在终端中运行“less my_file.py”而没有任何问题? - or1426
Python的哪个版本? - user559633
2.7.10。已在上面更新。 - Amy D
当我在控制台中输入pwd时,它明确显示我在Tools中。我不认为我可以在Windows cmd中使用less命令? - Amy D
5个回答

9
你需要将环境扩展到模块所在的文件夹。将此内容添加到导入模块的文件顶部即可。
import sys
sys.path.append("/users/usn/.../Tools/")
import my_file

我不想永久地将它添加到我的PYTHONPATH中。只是导入来运行一些测试。我应该能够从目录导入,对吧? - Amy D
1
@AmyD 这不会改变任何环境或路径变量,它只是在运行期间扩展了你的路径文件。这是安全的环境操作。 - saarrrr
如果我已经在相同的子目录中,为什么还需要这样做呢?不过这似乎解决了问题——谢谢! - Amy D
1
@AmyD导航到目录不会改变您导入自定义模块的模块的路径。 这会指示Python运行时在查找要导入的模块时查看您附加的路径以及其默认目录。不客气。 - saarrrr

3

您也可以使用imp模块。

import imp
my_file = imp.load_source('name', '/users/usn/.../Tools/my_file.py')

加载并初始化一个作为Python源文件实现的模块,并返回其模块对象。如果该模块已经被初始化过,则会再次进行初始化。name参数用于创建或访问模块对象,pathname参数指向源文件,file参数是该源文件,以文本形式打开并从开始阅读。

2

要导入您的模块,您需要将其目录添加到环境变量中,可以是临时的或永久的。

临时

import sys
sys.path.append("/path/to/my/modules/")
import my_module

永久性

将以下行添加到您的.bashrc文件(在Linux中),并在终端中执行source ~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/path/to/my/modules/"

Credit/Source: saarrrr另一个stackexchange问题

永久解决方案对我在开发容器中非常有用,我的库从自身导入,每次我更改代码时都必须重复打包和安装它...通过导出这个环境变量,我不必再经历那繁琐的流程了。 - Daniel Andrei Mincă

0

你也可以使用相对路径,例如在codium/vscode中右键单击文件时获取,或者自己检查。

然后,您可以直接导入:

import relative.path.to.my_file.py
from relative.path.to.my_file.py import my_function

或者在示例中,可能会像这样:

import some_folder.Tools.my_file.py

0

我相信,也可以使用site

import site
site.addsitedir('/users/usn/.../Tools/')
import my_module

然而,为什么他们不允许导入语句只引用类似JavaScript中的相对路径,这让我感到困惑...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接