hadoop Python中的模块/包解析

7z5jn7bk  于 2023-03-01  发布在  Hadoop
关注(0)|答案(1)|浏览(116)

所以我有一个项目目录"datapplatform",它的内容如下:

── dataplatform
        ├── __init__.py
        ├── commons
        │   ├── __init__.py
        │   ├── __pycache__
        │   │   ├── __init__.cpython-38.pyc
        │   │   ├── get_partitions.cpython-38.pyc
        │   │   └── packages.cpython-38.pyc
        │   ├── get_partitions.py
        │   ├── packages.py
        │   ├── pipeline
        │   │   ├── __init__.py
        │   │   └── pipeline.py
        │   └── spark_logging.py
        ├── pipelines
        │   ├── __init__.py
        │   └── batch
        │       ├── ETL.py
        │       ├── ReadMe.rst
        │       └── main.py
        └── requirement.txt

我有两个问题:
1.在pipelines包中,我尝试通过from dataplatform.commons import *main. py模块中的commons包导入模块。(Pycharm)马上抛出一个错误,说不允许,因为找不到包datapplatform,但是这里datapplatform有init. py,因此它是一个把commons作为子包的包。哪里出了问题?当我用from commons import *替换上面的import语句时,它工作得很好。
1.现在,项目工作目录: 当我通过将main.py文件的完整路径传递给python3可执行文件来执行dataprotPlatform目录中的www.example.com脚本时,它拒绝执行,并抛出如下所示的相同导入错误:main.pyscript from the the dataplatform directory by passing the complete path of the main.py file to the python3 executable, it refuses to execute, with the same import error being thrown as below:
文件"pipelines/batch/www.example.com",第2行,从数据平台导入 * 模块未找到错误:main.py", line 2, in from dataplatform.commons import * ModuleNotFoundError: No module named 'dataplatform'
我想知道我应该尝试从哪个根目录(工作目录)执行主文件(在我的本地机器上),这样www.example.com文件才能成功执行。main.py file will execute successfully.
我热衷于在代码中使用的每个子包名称后面附加
datapplatform包,因为我运行此程序的环境是Hadoop Sandbox(HDP 3.1),并且由于某些未知原因,需要附加datapplatform**包名称才能成功地从HDFS加载文件(代码被压缩并存储在HDFS上;对www.example.com的调用以某种方式正确地执行整个程序)。main.py executes the whole program correctly somehow).
注意:使用sys.path.append不是一个选项.

tgabmvqs

tgabmvqs1#

我理解的对吗?你需要main.py中的from dataplatform.commons import *来让它在Hadoop沙箱中工作?你可以在你的dataplatform文件夹上建立一个PyCharm项目,见下面我的示例项目结构。隐藏的.idea文件夹包含PyCharm项目设置。

├── dataplatform
│   ├── commons
│   │   ├── get_partitions.py
│   │   ├── __init__.py
│   │   ├── packages.py
│   │   ├── pipeline
│   │   │   ├── __init__.py
│   │   │   └── pipeline.py
│   │   └── spark_logging.py
│   ├── __init__.py
│   ├── pipelines
│   │   ├── batch
│   │   │   ├── ETL.py
│   │   │   ├── main.py
│   │   │   └── ReadMe.rst
│   │   └── __init__.py
│   └── requirement.txt
└── .idea
    ├── .gitignore
    ├── inspectionProfiles
    │   └── profiles_settings.xml
    ├── misc.xml
    ├── modules.xml
    ├── stackoverflow.iml
    └── workspace.xml

现在你可以在main.py中使用from dataplatform.commons import *这样的导入,因为PyCharm会把项目文件夹附加到sys.path
或者,您可以将PyCharm项目目录放在其他位置,并添加dataplatform文件夹的路径。文件〉设置...〉项目:PROJECTNAME〉项目结构...在右侧可以添加文件夹。

相关问题