python如何下载指定版本TensorFlow

 更新时间:2024年03月28日 08:37:25   作者:灬点点  
这篇文章主要介绍了python如何下载指定版本TensorFlow问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、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关系

在这里插入图片描述

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 用python代码将tiff图片存储到jpg的方法

    用python代码将tiff图片存储到jpg的方法

    今天小编就为大家分享一篇用python代码将tiff图片存储到jpg的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • ubuntu 安装pyqt5和卸载pyQt5的方法

    ubuntu 安装pyqt5和卸载pyQt5的方法

    这篇文章主要介绍了ubuntu 安装pyqt5和卸载pyQt5的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Pygame框架实现飞机大战

    Pygame框架实现飞机大战

    这篇文章主要为大家详细介绍了Pygame框架实现飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 解读时间序列分析之ADF检验

    解读时间序列分析之ADF检验

    这篇文章主要介绍了解读时间序列分析之ADF检验,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 利用Python实现定时程序的方法

    利用Python实现定时程序的方法

    在 Python 中,如何定义一个定时器函数呢?本文主要介绍了2种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 深入探究Python中的迭代器和生成器

    深入探究Python中的迭代器和生成器

    迭代器(Iterators)和生成器(Generators)是 Python 中最强大的功能之一,但也是新手最容易混淆的部分,本文将深入探讨这两种概念,以及它们在 Python 编程中的实际应用,需要的朋友可以参考下
    2023-06-06
  • 一文带你吃透Python中的日期时间模块

    一文带你吃透Python中的日期时间模块

    Python 提供了 日期和时间模块用来处理日期和时间,还可以用于格式化日期和时间等常见功能。这篇文章就来带大家了解一下它的使用,需要的可以参考一下
    2023-02-02
  • 我对PyTorch dataloader里的shuffle=True的理解

    我对PyTorch dataloader里的shuffle=True的理解

    这篇文章主要介绍了我对PyTorch dataloader里的shuffle=True的理解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python如何按单元格读取复杂电子表格(Excel)的数据

    Python如何按单元格读取复杂电子表格(Excel)的数据

    这篇文章主要介绍了Python如何按单元格读取复杂电子表格(Excel)的数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 详解Django CAS 解决方案

    详解Django CAS 解决方案

    这篇文章主要介绍了详解Django CAS 解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论