当前位置: 代码网 > it编程>前端脚本>Python > python如何下载指定版本TensorFlow

python如何下载指定版本TensorFlow

2024年05月18日 Python 我要评论
一、python安装与下载依赖依赖版本tensorflow>=2.3.0keras >= 2.4.3 numpy < 1.19.0pandas >= 1.1.0scikit-

一、python安装与下载依赖

依赖版本

tensorflow>=2.3.0
keras  >= 2.4.3 
numpy < 1.19.0
pandas >= 1.1.0
scikit-learn >= 0.23.2
librosa >=0.8.0
scipy==1.4.1

依赖下载

tensorflow>=2.3.0 pip3 install tensorflow-cpu==2.3.0 -i https://pypi.douban.com/simple/
keras >= 2.4.3 pip3 install keras==2.4.3 -i https://pypi.douban.com/simple/
pandas >= 1.1.0 pip3 install pandas==1.1.0 -i https://pypi.douban.com/simple/
scikit-learn >= 0.23.2 pip3 install scikit-learn==0.23.2 -i https://pypi.douban.com/simple/
librosa >=1.19.1 pip3 install librosa==0.8.0 -i https://pypi.douban.com/simple/
scipy==1.4.1 pip3 install scipy==1.4.1 -i https://pypi.douban.com/simple/ 

安装python3

yum -y install gcc
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
wget https://www.python.org/ftp/python/3.7.3/python-3.7.3.tgz
tar -zxvf python-3.7.3.tgz
mkdir /usr/local/python3
cd python-3.7.3
./configure --prefix=/usr/local/python3
make && make install
ln -sf /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -sf /usr/local/python3/bin/pip3.7 /usr/bin/pip3

验证

pip3 list

pip3升级

pip3 --default-timeout=10000 install -u pip

pip3 卸载与安装

  • pip3 install 包名 例如:pip3 install pandas
  • pip3 uninstall 包名 例如: pip3 uninstall pandas

二、mybatis plus 乐观锁配置

import com.baomidou.mybatisplus.extension.plugins.optimisticlockerinterceptor;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.transaction.annotation.enabletransactionmanagement;

/**
 * mybatis plus 乐观锁配置
 * @author nick
 */
@enabletransactionmanagement
@configuration
public class mybatisplusconfig {
    /**
     *   乐观锁
     */
    @bean
    public optimisticlockerinterceptor optimisticlockerinterceptor() {
        return new optimisticlockerinterceptor();
    }
}

三、@scheduled定时任务升级分布式定时任务

/**
 * disschedule切面
 */
@order(100)
@aspect
@slf4j
public class disscheduleaspect {

	public static final string server_name = "servername";

	private final idisscheduleservice disscheduleservice;

	private final string servername;

	public disscheduleaspect(
		idisscheduleservice disscheduleservice,
		environment environment) {
		preconditions.checknotnull(disscheduleservice);
		this.disscheduleservice = disscheduleservice;
		preconditions.checknotnull(environment);
		string servername = environment.getproperty(server_name);
		preconditions.checkargument(!strings.isnullorempty(servername));
		this.servername = servername;
	}

	/**
	 * 方法上有注解savelog
	 */
	@pointcut(value = "@annotation(com.citydo.xclouddesk.interceptor.annotation.disschedule)")
	public void disscheduleannotation() {
	}

	@around(value = "disscheduleannotation() && @annotation(disschedule)")
	public object disschedule(proceedingjoinpoint joinpoint, disschedule disschedule) throws throwable {
		preconditions.checknotnull(disschedule);
		// 当前时间
		date curdate = timeutil.getcurdate();
		// 获取name
		string name = disschedule.name();
		if (strings.isnullorempty(name)) {
			// 方法名
			signature signature = joinpoint.getsignature();
			name = signature.getname();
		}
		// 时间间隔
		int duration = disschedule.duration();
		if (duration <= 0) {
			log.error(
				"disschedule fail, duration {} is less or equal 0, name : {}",
				duration,
				name
			);
			return null;
		}
		// 时间间隔的单位
		timeunit unit = disschedule.unit().getunit();
		// 转化为毫秒
		long millis = unit.tomillis(duration);
		// 获取当前任务所属的开始时间
		date taskdate = timeutil.getmillisdate(curdate, (int) millis);
		// 当前服务是否属于线上服务
		if (!disscheduleservice.servernameisvalid(servername)) {
			log.info(
				"disschedule fail, servername is invalid, servername : {} , name : {} , taskdate : {}",
				servername,
				name,
				timeutil.specialformattodatestr(taskdate)
			);
			return null;
		}
		if (!disscheduleservice.trygetlock(name, taskdate, servername)) {
			log.info(
				"distributed lock not acquired, name : {} , taskdate : {}",
				name,
				timeutil.specialformattodatestr(taskdate)
			);
			return null;
		}
		// 执行正常的方法逻辑
		return joinpoint.proceed();
	}
}
/**
 * 在方法执行之前,决定当前是否需要执行定时调度任务
 * @author nick
 */
@target(elementtype.method)
@retention(retentionpolicy.runtime)
public @interface disschedule {

	/**
	 * 定时调度任务的名称(默认是方法名)
	 */
	string name() default "";

	/**
	 * 任务的间隔时间
	 */
	int duration();

	/**
	 * duration的时间单位(默认:分钟)
	 */
	disscheduleunit unit() default disscheduleunit.minutes;
}
/**
 * 分布式定时调度服务
 * @author nick
 */
public interface idisscheduleservice {

	/**
	 * 重新加载
	 */
	void reload();

	/**
	 * servername是否有效
	 */
	boolean servernameisvalid(string servername);

	/**
	 * 尝试获取锁
	 */
	boolean trygetlock(string taskname, date taskdate, string servername);

	/**
	 * 添加当前的servername
	 */
	void addservername(string servername);

	/**
	 * 移除当前的servername
	 */
	void removeservername(string servername);
}

/**
 * redis实现
 */
@slf4j
@service
public class disscheduleredisserviceimpl implements idisscheduleservice {

	public static final string dis_schedule_server_name = "disscheduleservername";

	private final iredismanager redismanager;

	public disscheduleredisserviceimpl(iredismanager redismanager) {
		preconditions.checknotnull(redismanager);
		this.redismanager = redismanager;
	}

	@override
	public void reload() {
		// do nothing
	}

	@override
	public boolean servernameisvalid(string servername) {
		try {
			return redismanager.ismember(dis_schedule_server_name, servername);
		} catch (exception e) {
			log.error(
				"disscheduleredisserviceimpl-servernameisvalid fail, servername : {} , exception : {}",
				servername,
				e
			);
		}
		return false;
	}

	@override
	public boolean trygetlock(string taskname, date taskdate, string servername) {
		try {
			return redismanager.setnx(
				taskname + "_" + timeutil.specialformattodatestr(taskdate),
				servername
			);
		} catch (exception e) {
			log.error(
				"disscheduleredisserviceimpl-trygetlock fail, taskname : {} , taskdate : {} , servername : {} , exception : {}",
				taskname,
				timeutil.specialformattodatestr(taskdate),
				servername,
				e
			);
		}

		return false;
	}

	@override
	public void addservername(string servername) {
		preconditions.checkargument(!strings.isnullorempty(servername));
		redismanager.sadd(dis_schedule_server_name, servername);
	}

	@override
	public void removeservername(string servername) {
		preconditions.checkargument(!strings.isnullorempty(servername));
		redismanager.srem(dis_schedule_server_name, servername);
	}


//  @disschedule(name = "testschedule", duration = 1, unit = disscheduleunit.minutes)
//  @scheduled(cron = "0 0/1 * * * ?")
//  public void testschedule() {
//	logger.info("输出");
//  }
}
public interface iredismanager {


	/**
	 * 向set中添加元素
	 */
	boolean sadd(string key, string value);

	/**
	 * set中是否存在value
	 */
	boolean ismember(string key, string value);

	/**
	 * 移除set中的元素
	 */
	void srem(string key, string value);


	/**
	 * 设置字符串的值(如果不存在的话)
	 */
	boolean setnx(string key, string value);
}
/**
 * 基于jedis实现的redismanager
 */
@service
public class jedismanagerimpl implements iredismanager {

	@autowired
	private jedispoolclient jedispoolclient;

	/**
	 * 返回1说明添加成功,返回0说明已经存在
	 * @param key
	 * @param value
	 * @return
	 */
	@override
	public boolean sadd(string key, string value) {
		preconditions.checkargument(!strings.isnullorempty(key));
		preconditions.checkargument(!strings.isnullorempty(value));
		return jedispoolclient.sadd(key, value) == 1l;
	}

	@override
	public boolean ismember(string key, string value) {
		preconditions.checkargument(!strings.isnullorempty(key));
		preconditions.checkargument(!strings.isnullorempty(value));
		return jedispoolclient.ismember(key, value);
	}

	@override
	public void srem(string key, string value) {
		preconditions.checkargument(!strings.isnullorempty(key));
		preconditions.checkargument(!strings.isnullorempty(value));
		jedispoolclient.srem(key, value);
	}

	@override
	public boolean setnx(string key, string value) {
		preconditions.checkargument(!strings.isnullorempty(key));
		preconditions.checkargument(!strings.isnullorempty(value));
		return jedispoolclient.setnx(key, value);
	}
}

参考:https://github.com/death00/dis-schedule

四、multiset与hashmap、multimap关系

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com