python - 如果我的脚本使用从其他文件导入的函数,如何让我的脚本从 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”。
有没有办法让这些文件相互读取,即使它们位于脚本的不同文件夹中?
提前致谢。
解决方案
要么创建可以使用 pip 安装和管理的正确 python 模块,要么(更容易)始终使用根目录作为工作目录。相应地设置导入路径,然后从根文件夹运行文件,例如python generate/generate_dataframe.py
当您在joor-cd-cleaner
目录中时。
推荐阅读
- python - 从 matplotlib 图中返回一个 numpy 数组太慢了,我该如何加快速度?
- python - 具有“动态常量”的 Python 工厂函数
- python - 即使列中的单个值不是 NaN,如何过滤 Coulmns
- java - Log4j 2 记录输出消息,带有指向文件号的链接
- javascript - 如何在reactjs或js中的includes关键字中传递元素数组作为参数
- javascript - 按下 ENTER 键时防止 Textarea 中的换行的代码不起作用
- c# - Why does `UseAuthentication` have to be placed after `UseRouting` and not before?
- oop - Use Ada's My_Class'Class(This) cast to mimic template method design pattern
- python - Can't import pygame even though it is installed
- oauth-2.0 - 如何在“使用 Apple 登录”同意屏幕中设置徽标?