To solve this optimization problem, we first need to define the decision variables, objective function, and constraints based on the given information.

- Decision Variables:
  - \(M\): Number of meat lunches to make.
  - \(V\): Number of veggie lunches to make.

- Objective Function:
  - Maximize Profit: \(8M + 6V\)

- Constraints:
  - Preparation Time Constraint: \(5M + 4V \leq 500\)
  - Packaging Time Constraint: \(3M + 5V \leq 400\)
  - Non-Negativity Constraints: \(M \geq 0, V \geq 0\)

Given these definitions, we can translate the problem into Gurobi code in Python. The reasoning behind this translation is to directly map each component of our optimization problem (decision variables, objective function, and constraints) into the corresponding elements within the Gurobi model.

```python
from gurobipy import *

# Create a new model
m = Model("Packaged_Lunches")

# Decision Variables
M = m.addVar(vtype=GRB.CONTINUOUS, name="Meat_Lunches", lb=0)
V = m.addVar(vtype=GRB.CONTINUOUS, name="Veggie_Lunches", lb=0)

# Objective Function: Maximize Profit
m.setObjective(8*M + 6*V, GRB.MAXIMIZE)

# Constraints
m.addConstr(5*M + 4*V <= 500, name="Preparation_Time")
m.addConstr(3*M + 5*V <= 400, name="Packaging_Time")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found: {M.varName} = {M.x}, {V.varName} = {V.x}")
    print(f"Maximum Profit: ${m.objVal:.2f}")
else:
    print("No optimal solution found")

```