To solve this problem, we first need to define the variables and constraints involved in the optimization process. Let's denote:

- $x$ as the number of acres dedicated to growing carrots.
- $y$ as the number of acres dedicated to growing onions.

The objective is to maximize profit, which can be represented by the function $75x + 90y$, given that the profit per acre of carrots is $75 and per acre of onions is $90.

There are several constraints to consider:

1. **Land Availability**: The total land used for carrots and onions cannot exceed 120 acres.
   - $x + y \leq 120$

2. **Tractor Time**: The total tractor time used for carrots and onions cannot exceed 120 days.
   - $1.5x + 2y \leq 120$

3. **Hand-picking Time**: The total hand-picking time used for carrots and onions cannot exceed 200 days.
   - $2.5x + 2y \leq 200$

4. **Non-negativity Constraints**: The number of acres dedicated to each crop cannot be negative.
   - $x \geq 0$
   - $y \geq 0$

Now, let's translate these constraints and the objective function into Gurobi code in Python:

```python
from gurobipy import *

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

# Define variables
x = m.addVar(lb=0, name="carrots")
y = m.addVar(lb=0, name="onions")

# Set the objective function to maximize profit
m.setObjective(75*x + 90*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + y <= 120, "land")
m.addConstr(1.5*x + 2*y <= 120, "tractor_time")
m.addConstr(2.5*x + 2*y <= 200, "hand_picking_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Carrots: {x.x} acres")
    print(f"Onions: {y.x} acres")
    print(f"Maximum Profit: ${m.objVal}")
else:
    print("No optimal solution found")
```