/
pyserve.html
160 lines (135 loc) · 8.36 KB
/
pyserve.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE html>
<html lang="en">
<!-- head -->
<head>
<meta charset="utf-8" />
<meta name="author" content="Kirill Klenov" />
<meta name="keywords" content="python,http," />
<meta name="description" content="PyServe. Веб-сервер одной командой" />
<meta name="application-name" content="klen.github.io" />
<meta name="application-url" content="." />
<meta name="og:image" content="http://klen.github.io/theme/images/logo.png" />
<meta name="og:title" content="PyServe. Веб-сервер одной командой" />
<title>PyServe. Веб-сервер одной командой — klen.github.io</title>
<link href="/theme/build_main.css" rel="stylesheet" type="text/css" media="screen" />
<link rel="alternate" type="application/atom+xml" title="klen.github.io - all posts" href="http://feeds.feedburner.com/klengihubcom">
<link rel="openid.server" href="http://www.myopenid.com/server">
<link rel="openid.delegate" href="http://horneds.myopenid.com/">
<link rel="openid2.local_id" href="http://horneds.myopenid.com/">
<link rel="openid2.provider" href="http://www.myopenid.com/server">
<meta http-equiv="X-XRDS-Location" content="http://www.myopenid.com/xrds?username=horneds.myopenid.com"> </head>
<body class="cloud zeta">
<h1 class="header">
<a class="header_title" href=.><i class="fa fa-beer"></i>klen.github.io</a>
</h1>
<nav class="menu"> <a class="menu_item menu_link" href="./pages/about-en.html">About me</a> <a class="menu_item menu_link" href="./category/blog.html">Blog</a> <a class="menu_item menu_link" href="./category/notes.html">Notes</a> </nav>
<div class="content">
<article class="article">
<header class="article_header">
<time class="article_header_time" datetime="2012-06-14 00:00:00">14.06.2012</time>
<span>in <a href="./category/Notes.html">Notes</a></span>
<h1 class="article_header_title">PyServe. Веб-сервер одной командой</h1><span class="article_meta">tags: <span><a href="./tag/python.html">python</a> , </span> <span><a href="./tag/http.html">http</a> </span> </span></header>
<div class="article_paginator zeta"> <div class="article_paginator_right">
<a href="some-git-things.html" class="article_paginator_right_link">Полезности для GIT</a> Ctrl→
</div> <div class="article_paginator_left">
←Ctrl <a href="filler.html" class="article_paginator_left_link">Filler. Пример простой игры на Canvas.</a>
</div></div>
<div class="article_content">
<p>Иногда возникает необходимость быстро запустить веб-сервер
нацеленный на содержимое локальной директории.</p>
<p>При установленном python это делается буквально в одну строку.</p>
<p>Для python версий 2.*:</p>
<div class="highlight"><pre><span></span>$ python -m SimpleHTTPServer
</pre></div>
<p>Для python версий 3.*:</p>
<div class="highlight"><pre><span></span>$ python -m http.server
</pre></div>
<p>Я часто пользовался этой функциональностью, например при отладке standalone HTML
приложений работающих с удаленными API. В какой то момент мне захотелось большего:</p>
<ul class="simple">
<li>Одинаковый синтаксис для python 2 и 3 версий;</li>
<li>Возможность отключения "автоиндекса" для директорий (игнорирование index.html);</li>
<li>Возможность указания IP-адреса сервера (шаринг в сети);</li>
<li>Возможность скрытия системных файлов;</li>
<li>Более приятный внешний вид при выводе каталога директории;</li>
<li>Возможность указания пути к директории (не только текущей);</li>
</ul>
<p>Так появился пакет <a class="reference external" href="https://github.com/klen/pyserve">PyServe</a>.</p>
<img alt="" src="/static/img/pyserve.png" />
<div class="highlight"><pre><span></span>$ pip install pyserve
</pre></div>
<p>Пакет не содержит зависимостей, поддерживает всю вышеперечисленную функциональность и прост
в установке. Теперь независимо от версии python вы можете запустить сервер одной командой:</p>
<div class="highlight"><pre><span></span>$ serve
</pre></div>
</div>
<g:plusone></g:plusone>
<script>(function(d, t) {
var g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.async = true;
g.src = 'https://apis.google.com/js/plusone.js';
g.text = '{lang:"nl"}';
s.parentNode.insertBefore(g, s);
}(document, 'script'));
</script>
<div class="article_paginator zeta"> <div class="article_paginator_right">
<a href="some-git-things.html" class="article_paginator_right_link">Полезности для GIT</a> Ctrl→
</div> <div class="article_paginator_left">
←Ctrl <a href="filler.html" class="article_paginator_left_link">Filler. Пример простой игры на Canvas.</a>
</div></div>
</article>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = 'klengithubcom';
var disqus_identifier = 'pyserve';
var disqus_url = 'http://klen.github.io/pyserve.html';
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<div class="share">
<div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_preferred_1"></a>
<a class="addthis_button_preferred_2"></a>
<a class="addthis_button_preferred_3"></a>
<a class="addthis_button_preferred_4"></a>
<a class="addthis_button_compact"></a>
<a class="addthis_counter addthis_bubble_style"></a>
</div>
<script type="text/javascript">var addthis_config = {"data_track_clickback":true};</script>
<script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4e108f9f24976375"></script>
</div> </div>
<a class="github" href="http://github.com/klen"><img src="./static/ForkMe_Wht.png" alt="alt"/></a> <footer class="footer">
© 2011–2015 Kirill Klenov
| <a href="./pages/about-en.html">About me</a>
<div class='pos1'></div>
<div class='pos2'></div>
</footer>
<script language="javascript" type="text/javascript" src="./theme/build_main.js"></script><div style="display:none;"><script type="text/javascript">
(function(w, c) {
(w[c] = w[c] || []).push(function() {
try {
w.yaCounter7784947 = new Ya.Metrika({
id:7784947,
enableAll:true, webvisor:true});
} catch(e) {}
});
})(window, 'yandex_metrika_callbacks');
</script></div>
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript" defer="defer"></script>
<noscript><div><img src="//mc.yandex.ru/watch/7784947" style="position:absolute; left:-9999px;" alt="" /></div></noscript><script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-30512655-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
</html>