首页 > 解决方案 > 如果我的脚本使用从其他文件导入的函数,如何让我的脚本从 Unix 上的可执行 python 文件运行?(ModuleNotFoundError)

问题描述

我编写了一个脚本来通过调用数据库来验证和清理复杂的 DataFrame。我将脚本分成模块。我经常在文件之间导入它们以使用分布在不同文件和目录中的某些函数和变量。

请查看图片以了解文件如何跨目录分布:

目录结构

目录结构

一个示例如下所示:

# Module to clean addresses: address_cleaner.py
def address_cleaner(dataframe):
...
return dataframe

# Pipeline to run all cleaning functions in order looks like: pipeline.py
from file1 import function1
...
def pipeline():
df = function1
...function2(df)
...function3(df)
...
return None

# Executable file where I request environment variables and run pipeline: exe.py
from pipeline import pipeline
import os
... 
pipeline()
...

当我在 Unix 上运行它时:

% cd myproject
% python executable.py

这是导入案例之一,我将其导入以避免硬编码环境变量字符串名称:

File "path/to/executable.py", line 1, in <module>
from environment_constants import SSH_USERNAME, SSH_PASSWORD, PROD_USERNAME, PROD_PASSWORD
ModuleNotFoundError: No module named 'environment_constants

当我在 Unix 上运行 executable.py 时,我得到一个 ModuleNotFoundError,它调用上面显示的管道,似乎我在文件之间执行的所有导入都使用它们的函数、变量或常量,尤其是不同目录中的那些没有t 到达对方。这些目录都属于同一个父目录“CD-cleaner”。

有没有办法让这些文件相互读取,即使它们位于脚本的不同文件夹中?

提前致谢。

标签: pythonuniximportmodulenotfounderror

解决方案


要么创建可以使用 pip 安装和管理的正确 python 模块,要么(更容易)始终使用根目录作为工作目录。相应地设置导入路径,然后从根文件夹运行文件,例如python generate/generate_dataframe.py当您在joor-cd-cleaner目录中时。


推荐阅读