哎,说到Python怎么上传,这事儿可真得好好唠唠。别以为编程就是对着黑框框敲代码,最终成果是要分享、部署的嘛!上传,那是必不可少的一环。
我第一次接触上传,那叫一个抓瞎。对着文档愣是啃了一下午,才勉强把一个简单的脚本扔到服务器上。现在回想起来,真是走了不少弯路。所以,今天我就来跟大家聊聊Python上传的那些事儿,希望能让你们少走点弯路。
最简单的,也是最常见的,就是用FTP/SFTP。这玩意儿就像个文件搬运工,你本地电脑上的东西,嗖嗖嗖就给搬到服务器上去了。Python里有个ftplib
库,专门用来做FTP的。
“`python
import ftplib
ftp = ftplib.FTP(‘你的FTP服务器地址’)
ftp.login(‘你的用户名’, ‘你的密码’)
ftp.cwd(‘要上传到的目录’) # Change working directory
filename = ‘你的文件名’
with open(filename, ‘rb’) as f:
ftp.storbinary(‘STOR ‘ + filename, f)
ftp.quit()
“`
瞧见没?几行代码搞定!不过,FTP明文传输,安全性嘛,emmm…自己掂量着办。SFTP就好多了,加密的,更安全。Python用paramiko
库可以搞定SFTP上传。安装paramiko
可以用pip install paramiko
命令。
“`python
import paramiko
hostname = ‘你的服务器地址’
username = ‘你的用户名’
password = ‘你的密码’
remote_path = ‘要上传到的目录’
local_path = ‘你的文件名’
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname, username=username, password=password)
sftp = ssh.open_sftp()
sftp.put(local_path, remote_path + ‘/’ + local_path)
sftp.close()
ssh.close()
“`
要注意哦,使用paramiko库之前,要用pip install paramiko
安装一下。
这两种方法都比较简单直接,但如果你要上传的东西比较多,或者需要自动化部署,那就得考虑更高级的玩法了。
比如,你可以用rsync。这玩意儿可厉害了,它只会上传修改过的部分,大大节省时间和带宽。想象一下,你改了一行代码,用FTP要传整个文件,而rsync只传那一行,效率简直提升N个档次!
Python里可以用os
或者subprocess
模块来调用rsync命令。
“`python
import os
source = ‘你的本地目录’
destination = ‘你的服务器地址:你的远程目录’
command = f’rsync -avz {source} {destination}’
os.system(command)
“`
或者
“`python
import subprocess
source = ‘你的本地目录’
destination = ‘你的服务器地址:你的远程目录’
command = [‘rsync’, ‘-avz’, source, destination]
subprocess.run(command)
“`
当然,前提是你的服务器上已经安装了rsync。
再来说说更现代的API接口。很多云服务商,比如阿里云、腾讯云、AWS,都提供了API接口,你可以通过Python代码直接调用它们的API来上传文件。这种方式更灵活,可以实现更复杂的上传逻辑,比如分片上传、断点续传等等。
以阿里云的OSS为例,你需要先安装aliyun-python-sdk-core
和aliyun-python-sdk-oss
这两个库。
“`python
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.profile import region_provider
from aliyunsdkoss.request.v20170919.PutObjectRequest import PutObjectRequest
你的AccessKey ID和AccessKey Secret
accessKeyId = ‘你的AccessKeyId’
accessSecret = ‘你的AccessKeySecret’
OSS Endpoint和Bucket名称
endpoint = ‘你的Endpoint’
bucketName = ‘你的Bucket名称’
要上传的文件路径
filePath = ‘你的文件名’
初始化AcsClient
region_provider.add_endpoint(‘OSS’, ‘cn-hangzhou’, endpoint)
acs_client = AcsClient(accessKeyId, accessSecret, ‘cn-hangzhou’)
创建PutObjectRequest
request = PutObjectRequest(bucketName, filePath.split(‘/’)[-1], filePath)
发起请求
response = acs_client.do_action_with_exception(request)
print(str(response, encoding=’utf-8′))
“`
这种方式稍微复杂一点,但功能强大,适合需要大量文件上传的场景。
还有一种情况,就是你写的Python代码本身需要上传到服务器运行。这时候,你可以用Docker。Docker可以将你的代码和依赖打包成一个镜像,然后上传到Docker Hub或者私有仓库,再在服务器上运行。这样可以保证你的代码在不同环境下的运行一致性。
使用Docker需要编写Dockerfile,定义你的镜像构建过程。
“`dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD [“python”, “你的主程序.py”]
“`
然后,构建镜像:
bash
docker build -t 你的镜像名称 .
上传镜像:
bash
docker push 你的镜像名称
最后,在服务器上运行镜像:
bash
docker run 你的镜像名称
Docker比较重,但它可以解决复杂的环境依赖问题,适合大型项目。
最后,别忘了版本控制。如果你用Git管理代码,可以直接把代码push到GitHub或者GitLab,然后在服务器上clone下来。这是一种非常方便的代码同步方式。
总之,Python上传的方法有很多,选择哪种取决于你的具体需求和场景。记住,没有最好的方法,只有最适合你的方法。多尝试,多实践,你总能找到最顺手的那一个。祝你上传顺利!
评论(0)