如果我不想向远程IPython笔记本服务器的用户提供SSH访问权限,有没有一种方法可以让用户浏览非 .ipynb 文件并下载它们?
如果我不想向远程IPython笔记本服务器的用户提供SSH访问权限,有没有一种方法可以让用户浏览非 .ipynb 文件并下载它们?
你可以使用内置的FileLink
和FileLinks
:
from IPython.display import FileLink, FileLinks
FileLinks('.') #lists all downloadable files on server
以上代码生成:
./
some_python_file.py
some_xml_file.xml
some_ipynb_file.ipynb
上面的三个项目是可以点击下载的链接。
很遗憾,由于边缘情况原因,FileLink
无法处理Jupyter目录外的文件。
但是,您可以通过先创建一个链接来解决此问题:
os.symlink( file_name, "tmp.txt" )
display( FileLink( "tmp.txt" ) )
def download_file( file_name : str ) -> None:
import os
from IPython.display import display, FileLink
base_name : str = os.path.basename( file_name )
k_info_file : str = ".download_file_info.txt"
# Remove previous link
if os.path.isfile( k_info_file ):
with open( k_info_file, "r" ) as fin:
previous_file = fin.read()
if os.path.isfile( previous_file ):
print( "Removing previous file link." )
os.remove( previous_file )
# Remember current link
with open( k_info_file, "w" ) as fout:
fout.write( base_name )
# Create the link
assert not os.path.isfile( base_name ), "Name in use."
os.symlink( file_name, base_name )
# Return the link
display( FileLink( base_name ) )