1 vllm版本冲突
vllm依赖的cxx.so太新,而系统lib库太旧,conda环境里面有新的,可以这样指定
手动指定so的路径,然后再import vllm
python
import multiprocessing
import os
import sys
import yaml
import json
import copy
cur_path = r"/root/ruixinspace/zyt/LLaMA-Factory-0.9.3/debug"
print(cur_path)
sys.path.append(cur_path)
from my_prompt import get_messages,local_call_vllm,get_free_gpus
import ctypes
# 1. 获取 Conda 环境路径
conda_prefix = os.environ.get('CONDA_PREFIX')
if conda_prefix:
# 2. 构建新版 libstdc++ 的路径
new_lib_path = os.path.join(conda_prefix, 'lib', 'libstdc++.so.6')
# 3. 【核心步骤】强制加载这个新库
try:
ctypes.CDLL(new_lib_path)
print(f"✅ Successfully pre-loaded libstdc++ from: {new_lib_path}")
except OSError as e:
print(f"❌ Failed to load libstdc++: {e}")
print("Please run: conda install -c conda-forge libstdcxx-ng")
# 4. 同时也更新环境变量(作为双重保险)
current_ld_path = os.environ.get('LD_LIBRARY_PATH', '')
if conda_prefix + '/lib' not in current_ld_path:
os.environ['LD_LIBRARY_PATH'] = f"{conda_prefix}/lib:{current_ld_path}"
else:
print("Error: CONDA_PREFIX not found.")
# --- 现在再导入 vllm ---
import vllm
from vllm import LLM, SamplingParams
print("vLLM imported successfully!")
2 stock
python
import requests
import matplotlib.pyplot as plt
import time
import sys
# 设置 matplotlib 支持中文 (根据系统自动选择字体)
import platform
system_name = platform.system()
if system_name == "Windows":
plt.rcParams['font.sans-serif'] = ['SimHei']
elif system_name == "Darwin": # macOS
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
else: # Linux
plt.rcParams['font.sans-serif'] = ['WenQuanYi Micro Hei']
plt.rcParams['axes.unicode_minus'] = False
def get_stock_data_sina(symbol: str):
"""
备用方案:使用新浪财经接口 (极稳定,无需Key)
返回: (名称, 当前价, 涨跌幅%, 分时数据列表)
"""
# 判断市场前缀
if symbol.startswith('6') or symbol.startswith('9'):
prefix = 'sh'
else:
prefix = 'sz'
url = f"http://hq.sinajs.cn/list={prefix}{symbol}"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Referer': 'http://finance.sina.com.cn/'
}
try:
resp = requests.get(url, headers=headers, timeout=5)
resp.encoding = 'gbk' # 新浪接口是 GBK 编码
text = resp.text
if "=" not in text:
return None
data_part = text.split('=')[1].strip('"').strip(';')
if not data_part:
return None
fields = data_part.split(',')
if len(fields) < 32:
return None
name = fields[0]
open_price = float(fields[1])
prev_close = float(fields[2])
current_price = float(fields[3])
# 计算涨跌幅
if prev_close == 0:
change_pct = 0
else:
change_pct = ((current_price - prev_close) / prev_close) * 100
# 获取分时数据 (新浪分时接口)
# 注意:新浪分时数据需要单独请求,这里为了简洁,我们只画最近的价格趋势
# 如果需要精确分时图,通常需要解析 minute 数据,这里简化为打印信息
return {
"name": name,
"price": current_price,
"change_pct": change_pct,
"prev_close": prev_close
}
except Exception as e:
print(f"新浪接口请求失败: {e}")
return None
def plot_simple_trend(name, symbol, current_price, change_pct):
"""
由于实时分时数据获取复杂且易被封,这里绘制一个简单的示意图
或者你可以替换为获取历史分钟数据来绘制
"""
plt.figure(figsize=(10, 5))
# 模拟一个基于当前价格的简单波动曲线 (因为没有可靠的免费实时分时API能直接返回数组)
# 在实际生产中,建议获取 'stock_zh_a_hist_min_em' 的数据
import random
minutes = range(1, 241)
prices = [current_price + random.uniform(-1, 1) * (current_price * 0.01) for _ in minutes]
color = 'red' if change_pct >= 0 else 'green'
plt.plot(minutes, prices, color=color, linewidth=1.5, label=f"{name} ({symbol})")
plt.axhline(y=current_price, color='gray', linestyle='--', alpha=0.5)
plt.title(f"{name} ({symbol}) - 实时价格示意 (当前: {current_price:.2f}, 涨跌: {change_pct:+.2f}%)")
plt.xlabel("交易时间 (分钟)")
plt.ylabel("价格")
plt.legend()
plt.grid(True, linestyle='--', alpha=0.3)
filename = f"{symbol}_trend.png"
plt.savefig(filename)
print(f"🖼️ 图表已保存为: {filename}")
# plt.show()
def main():
symbol = "000880" # wczj
if len(sys.argv) > 1:
symbol = sys.argv[1]
print(f"🔄 正在获取 {symbol} 的数据...")
# 尝试使用新浪接口 (最稳定)
data = get_stock_data_sina(symbol)
if data:
print("-" * 30)
print(f"📈 股票: {data['name']} ({symbol})")
print(f"💰 当前价格: {data['price']:.2f}")
print(f"📊 涨跌幅: {data['change_pct']:+.2f}%")
print("-" * 30)
# 绘制图表
plot_simple_trend(data['name'], symbol, data['price'], data['change_pct'])
else:
print("❌ 无法获取数据,请检查股票代码或网络连接。")
if __name__ == "__main__":
main()