python - 为什么我的python脚本不能将函数导入为:from functions import
问题描述
以下 python 脚本应打印所需的名称
脚本读取functions.py
包含该get_names
函数的
more names.py
import os
import sys
script_dir = os.path.dirname(os.path.abspath(__file__))
python_files_dir = os.path.join(script_dir, 'python_files')
sys.path.append(python_files_dir)
from functions import *
# name
Name = get_names()
print Name;
当我们运行 时names.py
,我们得到get_names is not defined
,而实际上get_names
函数定义在functions.py
例如当我们运行names.py
python names.py
Traceback (most recent call last):
File "names.py", line 18, in <module>
Name = get_names()
NameError: name 'get_names' is not defined
python_files/functions.py
包含该函数的脚本 -get_names
more python_files/functions.py
def get_names(path='/tmp/folder_1'):
.
.
.
我必须说这只发生在一台Linux机器上,而确切的脚本names.py
在其他机器上工作。
解决方案
您正在处理它,就好像它在一个包中一样,但事实并非如此。它找不到文件functions.py,因为它在一个目录中。因此,要么通过添加一种__init__.py
方式将该目录制作成一个包,您就可以让它像一个包一样工作并简单地导入
from python_file.function import get_name
或者干脆从python_file目录中删除functions.py,并把它和names.py放在同一个目录下,这样就可以正常导入了
from function import get_name
而不是经历可能出错的 sys 和 os 系统路径操作的不必要的漫长过程。还要避免使用
from module import *
因为这通常被认为是不好的做法,您可能想考虑将模块名称从functions.py更改为其他名称
推荐阅读
- python - 将参数传递给python中的装饰器
- bash - 如何在 curl 请求中扩展文件名
- vba - 如果语句在 VBA 中没有返回正确的值
- ios - 在 Swift 中同时 Deinit 两个 ViewController
- python-3.x - 无法单击使用 selenium 和 python 进行抓取的按钮
- octobercms - 如何在十月 CMS 中显示下一个和上一个项目
- django - 按组枚举查询集中的实例
- pyspark - 如何使用 Pyspark / Dataproc 监控 jvm 堆大小
- arduino - 来自按钮增量而不是高/低的 Arduino 数据值
- java - Java - 如何使用 jmap 定位内存泄漏的原因