You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python项目ModuleNotFoundError与SyntaxError问题求助

Python项目运行错误排查与解决

项目结构

Scriptus
 ├── frontend
 │   ├── hf_call.py
 │   ├── slide_deck.py
 │   ├── slide_gen.py
 │   └── ui.py
 ├── hf_service
 │   ├── consts.py
 │   └── hf_model.py
 ├── generated/
 ├── .env
 ├── .gitignore
 ├── .gitattributes
 ├── README.md
 └── requirements.txt

遇到的问题

问题1:直接运行脚本报错

执行命令:python frontend/hf_call.py
错误信息:

ModuleNotFoundError: No module named 'hf_service'

问题2:模块方式运行报错

执行命令:python -m frontend.hf_call
错误信息:

SyntaxError: source code string cannot contain null bytes

代码详情

hf_service/consts.py

HF_API_URL = "https://api-inference.huggingface.co/models/"
MODEL_NAME = "meta-llama/Meta-Llama-3.1-8B-Instruct"

hf_service/hf_model.py

import os
import requests
from dotenv import load_dotenv
from consts import HF_API_URL, MODEL_NAME

load_dotenv()
HF_API_KEY = os.getenv('HF_API_KEY')

def generate_text(input_text: str) -> str:
    api_url = f"{HF_API_URL}/{MODEL_NAME}"
    headers = {"Authorization": f"Bearer {HF_API_KEY}"}
    payload = {"inputs": input_text}
    response = requests.post(api_url, headers=headers, json=payload)
    response.raise_for_status()
    return response.json().get('generated_text', '')

if __name__ == "__main__":
    input_text = "Hello, world!"
    print(generate_text(input_text))

frontend/hf_call.py

import requests
import os
from dotenv import load_dotenv
from hf_service.consts import HF_API_URL, MODEL_NAME

load_dotenv()
HF_API_KEY = os.getenv('HF_API_KEY')

def generate_text(input_text: str) -> str:
    api_url = f"{HF_API_URL}/{MODEL_NAME}"
    headers = {"Authorization": f"Bearer {HF_API_KEY}"}
    payload = {"inputs": input_text}
    response = requests.post(api_url, headers=headers, json=payload)
    response.raise_for_status()
    return response.json().get('generated_text', '')

if __name__ == "__main__":
    input_text = "Hello, world!"
    print(generate_text(input_text))

.env

HF_API_KEY=your_huggingface_api_key_here

已尝试操作

  • 直接运行frontend/hf_call.py,触发ModuleNotFoundError
  • 以模块方式运行脚本,触发SyntaxError
  • 检查并更新了相关代码文件
  • 确认.env文件存在且配置正确

解决方案

解决问题1:ModuleNotFoundError

直接运行脚本时,Python默认只会把脚本所在目录加入sys.path,无法找到同级的hf_service模块。可通过以下方式解决:

方法1:在脚本中添加路径

在frontend/hf_call.py开头加入代码,将项目根目录加入Python路径:

import sys
from pathlib import Path

# 获取项目根目录(Scriptus文件夹)
root_dir = Path(__file__).parent.parent
sys.path.append(str(root_dir))

方法2:设置环境变量

运行脚本前,先设置PYTHONPATH为项目根目录:

  • Linux/macOS:
    export PYTHONPATH=/path/to/Scriptus
    python frontend/hf_call.py
    
  • Windows(PowerShell):
    $env:PYTHONPATH = "C:\path\to\Scriptus"
    python frontend/hf_call.py
    

方法3:使用模块方式运行(需先解决问题2)

问题2修复后,在项目根目录下执行:

python -m frontend.hf_call

解决问题2:SyntaxError(空字节)

该错误说明某个Python文件包含不可见的空字节(\x00),多由编码问题或意外插入字符导致,处理步骤如下:

步骤1:定位问题文件

用命令行工具检查文件中是否存在空字节:

  • Linux/macOS:
    grep -r "\x00" Scriptus/
    
  • Windows:用Notepad++打开文件查看特殊字符,或执行PowerShell命令:
    Get-ChildItem -Path Scriptus\*.py -Recurse | ForEach-Object {
        if ((Get-Content $_.FullName -Raw) -match "\x00") {
            Write-Host "Null byte found in: $($_.FullName)"
        }
    }
    

步骤2:清除空字节

找到问题文件后,任选一种方式修复:

  • 用VS Code、Notepad++等编辑器打开文件,选择编码为UTF-8无BOM后重新保存。
  • Linux/macOS下用命令行清除:
    sed -i 's/\x00//g' path/to/affected/file.py
    

步骤3:验证修复

重新运行模块命令,确认错误消失:

python -m frontend.hf_call

额外优化建议

  • hf_service/hf_model.py中导入consts的方式有误,建议改为:
    # 绝对导入(推荐)
    from hf_service.consts import HF_API_URL, MODEL_NAME
    # 或相对导入
    from .consts import HF_API_URL, MODEL_NAME
    
  • 可在项目根目录创建setup.py或pyproject.toml,将项目作为可安装包,彻底避免路径问题。

内容的提问来源于stack exchange,提问作者Kaurcs2001

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:37:02