cvut / ni-pyt Goto Github PK
View Code? Open in Web Editor NEWMateriály k předmětu NI-PYT na FIT ČVUT
Home Page: https://courses.fit.cvut.cz/NI-PYT/
License: Creative Commons Attribution Share Alike 4.0 International
Materiály k předmětu NI-PYT na FIT ČVUT
Home Page: https://courses.fit.cvut.cz/NI-PYT/
License: Creative Commons Attribution Share Alike 4.0 International
The course seems awesome but unfortunately my czech skills are not nearly that good yet, and while it's not something urgent it would be great to have an english version as well at some point.
Já mám menší problém s instalací balíčku pomocí pipu z testovací PyPi. Když projekt stáhnu z githubu a nainstaluju pomocí setup.py install, tak všechno funguje jak má.
Stejně tak funguje instalace pomocí pipu, když použiju přímý link na archiv s projektem, tedy
python -m pip install https://testpypi.python.org/packages/.../pytwitter-0.3.3.tar.gz
Když ale zkusím balíček nainstalovat přímo, tedy:
python -m pip install -i https://testpypi.python.org/pypi pytwitter
vypíše program chybu při řešení závislostí:
Could not find a version that satisfies the requirement Flask>=0.11.1 (from pytwitter) (from versions: )
No matching distribution found for Flask>=0.11.1 (from pytwitter)
Verze použitých modulů jsem získal pomocí pip freeze, předpokládám teda, že problém je v tim přepínači -i https://testpypi... . Ještě jsem zkoušel přepínač --extra-index-url, tedy:
python -m pip install --extra-index-url https://testpypi.python.org/pypi pytwitter
Ten však nainstaluje nějaký uplně jiný projekt než můj :-) (hádám, že jde o konflikt názvů projektů na normální a testovací PyPi).
Měl bych tedy změnit verze potřebných modulů (například při změně verze Flasku na 0.10 tahle závislost projde, ale spadne to hned na další (click 6.6)), přejmenovat projekt na něco jiného a nahrát ho znova nebo použít nějaký jiný přepinač pipu pro instalaci z testovací PyPi?
(všechny instalace jsem testoval na novém, prázdném virtuálním prostředí)
Ráno před cvičením na dokumnetaci musím vytisknout 50 cheatsheetů na RST.
Po poslední změně v materiálech pouštíme Flaks pomocí flask run
. V zadání úkolu na Flask chceme, aby byl použitý click na spuštění webové aplikace. Tato kombinace je zvláštní a je třeba se nad ní přinejmenším zamyslet.
Ze studentské ankety:
Prva polovica semestra bola dobra, ucivo mozno az prilis jednoduche. Potom sa narocnost uciva vyrazne zvysila, chcelo by to narocnost trochu zrovnat. Mozno zacat narocnejsimi vecami (napr. spojit 1. a 2. ulohu do jednej), aby viac casu zvysilo na narocnejsie veci a tie rozdelit na viac cviceni.
Přišlo mi, že obtížnost, resp. náročnost úloh byla koncem semestru až moc velká. Chápu, že cílem je procvičit dané téma, ale např. v úkolu na implementaci různých typů postav v bludišti (async) by jich stačilo implementovat menší počet. Dále k asyncio - možná je to tím, že jsem se s asynchronním programováním poprvé potkal tady, ale rozdělil bych toto téma do dvou cvičení, bylo toho celkem dost najednou. Nevím jak moc je tohle reálné, ale počet kreditů bych klidně i navýšil. Řekl bych, že po matematice mi MI-PYT zabral nejvíc času, ale byl za nejméně kreditů.
Trochu snížit náročnost nebo intenzitu domácích úkolů. Na volitelný předmět toho bylo trochu hodně.
Požadavků na některé úlohy v semestru je podle mě zbytečně mnoho, obzvlášť vzhledem k týdenním deadlinům. Byl jsem nucen dávat přednost úlohám z povinných předmětů a tyto jsem pak stíhal jen s obtížemi (ke konci už vůbec).
Nesmyslně krátké deadliny, pokud by byl předmět povinný a byl za 8 kreditů pak my možná týdenní dedliny s nemožnosti konzultace na cvičení dávaly smysl Hrozné zadání úkolů, pouze text (jako vážně?) vrcholem pro mě bylo bludiště (kolik hodin času by ušetřil generátor bludišť nebo jedno ukázkové zadání a řešení) Předmět byl dle mého spíše zaměřený na lidi, kteří už si na zvolené technologie alespoň trochu sáhli Nesmyslně přísné hodnocení úkolů s nemožností opravy Úkoly vypadaly jako, že se nejdřív napsalo referenční řešení a až zpětně se psalo zadání
Některé úkoly mi přišli otravné a nezajímavé (dokumentace, testy), ale chápu, že je to potřeba vysvětlit a ukázat. Úkoly každý týden zabíraly poměrně hodně času, možná jsem si ale už odvykl na stresující kolotoč úkolů z PA2 a zlenivěl jsem.
Dostupnost materialov vopred, aby si bolo mozne prejst zadaniu uloh a uz pri navrhu prvej casti mysliet na dalsie upravy. Prva polovica semestra bola dobra, ucivo mozno az prilis jednoduche. Potom sa narocnost uciva vyrazne zvysila, chcelo by to narocnost trochu zrovnat. Mozno zacat narocnejsimi vecami (napr. spojit 1. a 2. ulohu do jednej), aby viac casu zvysilo na narocnejsie veci a tie rozdelit na viac cviceni.
Lze ke githubovému webhooku připojit vlastní payload kromě secret? Nemohl jsem nic takového najít. Jde mi o nastavení pravidel pro webovou verzi, aby se to nemuselo pořád deployovat, jinak budu asi řešit uploadem souboru.
Ahoj, čím by to mohlo být? Stará verze pythonu?
Jedná se o zkopírovaný příklad z eduxu/http://click.pocoo.org/5/
(env)user@komp:~/Desktop/github-robot$ pip install click
Requirement already satisfied (use --upgrade to upgrade): click in ./env/lib/python3.4/site-packages
Cleaning up...
(env)user@komp:~/Desktop/github-robot$ python3 click.py --help
Traceback (most recent call last):
File "click.py", line 1, in <module>
import click
File "/home/user/Desktop/github-robot/click.py", line 3, in <module>
@click.command()
AttributeError: 'module' object has no attribute 'command'
(env)user@komp:~/Desktop/github-robot$ python3 click.py --count=3
Traceback (most recent call last):
File "click.py", line 1, in <module>
import click
File "/home/user/Desktop/github-robot/click.py", line 3, in <module>
@click.command()
AttributeError: 'module' object has no attribute 'command'
V předmětu MI-RUB (Ruby) minulý rok:
Co si myslite pod pozadavkem "Musí být použit nativní způsob pytest testů (pytest umí spouštět i testy pro unittest apod.)"?
Když nainstaluju PyQt5 do virtuenvu pomocí wheelu, ale na systému už nějaké (jiné) Qt mám, dostávám:
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
Reinstalling the application may fix this problem.
Neúspěšně ukončen (SIGABRT) (core dumped [obraz paměti uložen])
Vyřešit to jde pomocí:
QT_QPA_PLATFORM_PLUGIN_PATH=__venv__/lib/python3.6/site-packages/PyQt5/Qt/plugins/platforms/ python ...
Je dobré to dát do materiálů o Qt, když se to bude dít i studentům.
Ahoj, narazil jsem pri delani ukolu na to, ze kdyz chci v kodu pouzivat obrazky / ui soubory, python je hleda relativne k adresari, ze ktereho ho pustim. Napr.
python -m maze # ok
cd ~
python -m maze # nenajde maze/grass.svg atd.
Vyresil jsem to pomoci resource systemu (http://pyqt.sourceforge.net/Docs/PyQt5/resources.html). V materialech k tomu ale nic neni. Je to dobry zpusob / dela se to jeste nejak jinak?
Diky
Tématicky je tenhle problém už starší, ale řeším ho teď kvůli semestrálce.
Nevím jestli dělám někde chybu já, nebo to je takhle by design, ale když si udělám fixture z objektu, který má v sobě betamax_session
a tu použije dvakrát, tak se při druhém volání neuloží nic do kazety.
Usecase je ten, že se potřebuju autentifikovat přes OAuth, takže mám objekt (dostupný jako fixture), ten v inicializaci conftest.py
pošle request na autentifikaci (tohle se zapíše do kazety) a potom bych očekával, že ho budu moct dál používat v testu. Jenže když ho v testu použiju na volání dalšího requestu, tak se sice vytvoří kazeta, ale je prázdná.¨
Lépe to asi popsat příkladem, takže tady je minimum (non)working code:
(odkaz na repo: https://github.com/melkamar/betamax-test )
git clone https://github.com/melkamar/betamax-test
cd betamax-test
python -m py.test
... přijde mi, že se to občas chová náhodně, protože aniž bych něco měnil, správně se mi nahrály kazety. Nedovedu si ale vysvětlit proč.
Prosím o nějakou radu :)
Měla by aplikace dotahovat data z API periodicky v intervalu nebo si jen 1x zažádat o data (přístupem na URL).
In IPython notebook
https://github.com/cvut/MI-PYT/blob/master/tutorials/06-pandas/pandas-intro.ipynb
you use:
pandas.DataFrame.from_csv('actors.csv', index_col=None)
From docs:
Docstring:
Read CSV file (DISCOURAGED, please use :func:pandas.read_csv
instead).
...
Možno sa to spomínalo na cviku a už som zabudol, ale čo presne si mám predstaviť pod spracovaním entít pri tom webovom rozhraní twitterwallu?
It is in master, just disabled and untested.
Jak má správně probíhat spouštění package (nainstalované přes pip) jako skriptu? Doteď to bylo:
Když si ale package nainstaluju pomocí pip, tak se mi tyhle auth soubory vybalí kdovíkam a nepřijde mi moc user friendly upravovat je někde v site-packages.
Uživatel může sice parametrem říct, kde se soubor nachází, ale to by ho musel nejdřív nějak získat. Jak na to?
Jaky ma mit format soubor s auth.cfg?
Asi chcete testovat trochu automaticky a mit sjednoceny format s API keys by zrejme pomohlo.
Navrhuji INI format parsovatelny configparser
:
[github.com]
key = my_secret_key
[twitter.com]
key = my_secret_key
We're building a new site for Python-related course materials.
Currently, there's not much to see on the home page; we're focusing on the content. I'll be starting to teach a course based on the MI-PYT materials on Tuesday; the page for that is here: http://naucse.python.cz/2017/pyknihovny-brno/
It would be nice to move the tutorials to naucse, so they can be shared more widely and improved in context of other open courses in the Python community. They can be linked from here, in the same way that the file for pandas links to a Notebook deeper in the repo.
Exercises/projects, on the other hand, are currently out of naucse's scope; those should remain in this repo.
So, I'd like to:
Do you think this is a good idea?
Things holding this back:
Pokud by existovala vůle držet studenty na fakultním Gitlabu, exitoval (existuje, ale teď moc nefunguje) nástroj Gitman, který dokáže/dokázal vyrobit repozitáře pro celý předmět nebo skupinu podle KOSu, případně aktualizovat.
Bývala to moje semestrálka, ale když by se trochu oprášila, měla by bez problémů fungovat. Psáno v ruby (on rails).
Když by to někoho hodně nebavilo, navrhuji klidně vyrobit nějaký newebový skript.
V každém případě mi ale přijde jednodušší držet si studenty na jednom místě než stále obletovat mnoho serverů nebo neustále pullovat.
Je nějaká možnost zbavit se jednoduše __main__.py
v helpu při volání python -m twitterwall
? Entry point funguje standartně.
$ twitterwall
Usage: twitterwall [OPTIONS] COMMAND [ARGS]...
$ python -m twitterwall
Usage: __main__.py [OPTIONS] COMMAND [ARGS]...
Kdo dělá GitHub label bota, má v zadání:
Ve výchozí routě / by aplikace měla informovat uživatele, jak lze použít.
To je proto, abyste také použili šablony a HTML. Mít tam routu, která vrátí plain-text string není účelné.
Dopíšu do zadání, že by mělo jít o jednoduchou HTML stránku. Omlouvám se, že to měním až takhle, ale bylo to tak myšleno celou dobu, jen to nebylo dost dobře napsané.
Díky za pochopení.
cc @bogdanbodnar @pajcak @chmelva4 @pklejch @melkamar @pilatcen @tulinkry @bobirdmi @krestfi1 @nzt4567 @matejekm @slowbackspace @tomanj23 @Fanarim
Ahoj,
mám kód:
payload = '{"name": "bug", "color": "f29513"}'
print ("payload: "+payload)
r = session.post('https://api.github.com/repos/'+repo+'/issues/1/labels', data=payload)
pprint.pprint (r.json())
a github mi vrátí:
python3 robot.py
payload: {"name": "bug", "color": "f29513"}
{'documentation_url': 'https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue',
'message': 'Invalid request.\n'
'\n'
'For \'links/2/schema\', {"name"=>"bug", "color"=>"f29513"} is '
'not an array.'}
Můžu poprosit o nakopnutí?
Díky
Myslím že jméno se tomu předává proto, aby si Flask našel ten modul, a podle toho hledal adresáře jako templates/
. Je tudíž dobré tam vždycky dávat __name__
.
Chapu spravne, ze spusteni webove aplikace z prikazove radky je jenom kvuli spusteni na localhostu? Protoze na pythonanywhere je to k nicemu (automaticky nacte a spusti uvedeny soubor).
if __name__ == '__main__'
__main__.py
maintainer
, maintainer_email
Ahoj,
kde sa da prosim pythonanywhere nastavit, aby sa
aplikacia spustala z web commandom?
python3 twitter_wall.py web
....Error log:....
ImportError: No module named 'app'
....
na localhost-e funguje ok.
...
kostra kodu:
...
from flask import Flask
from flask import render_template
app = Flask(name)
@app.route('/')
@app.route('//')
def index(word=None):
....
@cli.command()
def web():
app.run(debug=True)
if name == 'main':
cli()
dakujem!
Třída Actor
z úkolu na asyncio se špatně testuje, protože automaticky naplánuje behavior
, který pak běží i když chci otestovat třeba jen step
. To je chyba návrhu; mělo by se to spouštět explicitně.
Ahoj, možná jsem něco přehlédl, ale jak můžu udělit někomu k privátnímu repozitáři přístup pouze pro čtení? Díky
Mohli bychom testovat, jestli věci v těhle materiálech fungují, pomocí doctestu.
Kdyz zkusim naimportovat nejaky modul na zacatku setup.py a mam setup_requires=['my_module'],
setup_requires sice nainstaluje tento modul, ale az pri volani funkce setup(). Tedy v okamziku kdyz tento modul potrebuju, neni nainstalovan, a navic kod po funkci setup() je na nic (distribucni balicek uz existuje).
Tedy tento argument je uplne zbytecny?
Kdyby někdo hledal, jak funguje políčko secret
:
https://developer.github.com/webhooks/securing/
Projíždím zatím pushnuté maze a narážím na několik chyb, tak ať se jich vyvarujete:
X
a malé v
, jak je to v zadáníis_reachable
má být bool pro celé bludiště, ne matice boolů pro jednotlivá políčkaVe web módu zobrazuju v default routě obsah README.md
. Tohle ale nefunguje při spouštění po pip install
, jelikož README.md
hledám u .py
souborů. Obsahem (...)/site-packages/mypkg/
jsou jen .py
soubory, ale já tam potřebuju i to readme, html, css atd. Jak zařídit, aby se při instalaci package rozbalilo všechno?
Našel jsem parametr pro setup.py: include_package_data
, ale ani to nepomohlo, v site-package
pořád nic není. (http://flask.pocoo.org/docs/0.11/patterns/distribute/)
V a93da80 jsem přidal deadliny na semestrálku. Na příštím cvičení na ně upozorníme.
Porad mam nasledujici chyby:
"python -m my_module web" pada s "SystemError: Parent module '' not loaded, cannot perform relative import". Pricemz, pri vymene web za console program funguje bez chyb.
"entry_point web" pada s "python can't open file '...\envs\mipytcvut\Scripts\githubbot': [Errno 2] No such file or directory". Avsak soubor "...\Scripts\githubbot" existuje. Entry pointem je githubbot. To same, ale s prikazem console opet kupodivu funguje.
Mam Windows.
Nejaka rada?
Od uživatelů @tulinkry a @slowbackspace mi přišly pozvánky na spolupráci na repozitářích, al tyto pozvánky mi nefungují. Předpokládám, že je to proto, že repozitář přejmenovali z něčeho jako "MI-PYT16" na opravdové jméno projektu – a stihli to dřív než jsem kliknul na pozvánku.
Můžete prosím pozvánku poslat znovu?
Můžu jenom drzý a nepodstatný komentář k 6. lekci (protože jako celek je super, stejně jako celý kurz)?
...Automaticky pouštěné skripty musí být samozřejmě robustní, nástroje ke zkoumání dat ale bývají přívětivé k analytikovi, často na úkor robustnosti nebo „dobrých programátorských mravů”. Například některé operátory tak trochu „hadají”, co uživatel chtěl, a v tutoriálech se setkáte se zkratkami jako import pandas as pd či dokonce from numpy import *. ...
from numpy import *
je samozřejmě "nemravný kód" a hádání operátorů leckdy přinese více škody než užitku, ale import pandas as pd; import numpy as np; from matplotlib import pyplot as plt
jsou natolik obvyklé zkratky, že se vyskytují nejen v tutoriálech, ale i v kvalitních knihovnách na numpy/pandas/... založených (jako seaborn, xarray, ...). Naopak explicitní pandas.něco
jsem viděl snad poprvé ve vašem tutoriálu. Řekl bych, že v tomto případě konvence je silnější než princip explicitnosti.
Ale je to samozřejmě otázka názoru :-)
Flask debug server s nima má problém, a nejsou nijak výrazně lepší než ty absolutní.
V kapitole o dokumentaci nebyl zmíněn PEP 484 - jaký na to máte názor? Je rozumný to používat, nebo se spíš přikláníte k definování typů v pydocs?
Jestli to chápu dobře, ta syntaxe má být backward compatible pro Python 3*, takže by to neměl být problém..?
tl;dr: tahle syntaxe ano/ne?
def greeting(name: str) -> str:
return 'Hello ' + name
Ahoj, jaké funkce budeme rozvíjet u aplikace z prvního úkolu? Konfig soubor, napojení na API a pokud jsem slyšel dobře, příště to bude Streaming API a webové rozhraní?
Přemýšlím, že bych využil projekt na kterém pracuju, tak pokud by to sedělo, ozval bych se na mail.
Na prvním cvičení jsme nic neřekli o semestrálce, kromě toho, že za ní je až 50 bodů. Něco řekneme na druhém.
Ahoj,
zde http://pilatcen.pythonanywhere.com/ dostavam 500, hledal jsem google, ale moc jsem z toho moudry nebyl. Cim to muze byt?
/var/www/pilatcen_pythonanywhere_com_wsgi.py
import sys
path = '/home/pilatcen/1.HW-MI-PYT/'
if path not in sys.path:
sys.path.append(path)
from robot.py import app as application
Python anywhere error log:
ImportError: No module named 'robot.py'; 'robot' is not a package
2016-10-15 19:45:32,911 :Error running WSGI application
Traceback (most recent call last):
File "/bin/user_wsgi_wrapper.py", line 154, in __call__
app_iterator = self.app(environ, start_response)
File "/bin/user_wsgi_wrapper.py", line 170, in import_error_application
raise e
File "/bin/user_wsgi_wrapper.py", line 154, in __call__
app_iterator = self.app(environ, start_response)
File "/bin/user_wsgi_wrapper.py", line 170, in import_error_application
raise e
File "/bin/user_wsgi_wrapper.py", line 154, in __call__
app_iterator = self.app(environ, start_response)
File "/bin/user_wsgi_wrapper.py", line 170, in import_error_application
raise e
File "/bin/user_wsgi_wrapper.py", line 154, in __call__
app_iterator = self.app(environ, start_response)
File "/bin/user_wsgi_wrapper.py", line 170, in import_error_application
raise e
File "/bin/user_wsgi_wrapper.py", line 179, in <module>
application = load_wsgi_application()
File "/bin/user_wsgi_wrapper.py", line 175, in load_wsgi_application
return __import__(os.environ['WSGI_MODULE'], globals(), locals(), ['application']).application
File "/var/www/pilatcen_pythonanywhere_com_wsgi.py", line 6, in <module>
from robot.py import app as application
ImportError: No module named 'robot.py'; 'robot' is not a package
S použitím setup.py
uvedeného v materiálech mám na OS X problém, že to při kompilaci ignoruje include_dirs
, i když tam jsou uvedené na obou místech, a tím pádem to nenajde nic z numpy.
Snažil jsem se to nějak vyřešit a po nějaké době jsem dospěl k řešení, které mi funguje:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
setup(
ext_modules = cythonize([Extension('maze', ['maze.pyx'], include_dirs = [numpy.get_include()])]),
include_dirs=[numpy.get_include()]
)
Nevím, ale jestli to nemůže způsobit zase nějaké jiné problémy.
Twitter auth is needlessly complicated, and it requires giving your a telephone number to Twitter. I think it should come after Github API, as an example of auth problems, rather than people's first look at Web APIs.
The space in 'token '
for the Github authentication header is far too easy to overlook, there should be a note about it.
The click example explains just the minimum needed for the project. I'm not convinced that's a good introduction to the library. I've expanded it a bit in http://naucse.python.cz/2017/pyknihovny-brno/intro/click/ (we'll use that, so fixed)
Potřebuju v testu zavolat dvakrát tu samou betamax cassette, vypadá to takhle:
def test_fetch_issues(auth_session):
response = auth_session.get(fetch_issues_url.format(repository, 'all'))
issues = github_issues_bot.fetch_issues(repository, 'all', auth_session)
(...)
Tohle mi neprochází, error který dostávám je:
E betamax.exceptions.BetamaxError: A request was made that could not be handled.
E
E A request was made to https://api.github.com/repos/melkamar/mi-pyt-test-issues/issues?state=all that could not be found in test_process_issues.test_fetch_issues_label.
E
E The settings on the cassette are:
E
E - record_mode: none
E - match_options {'uri', 'method'}.
Jenže když zakomentuju jakýkoliv z těch dvou řádků (ať první nebo druhý), tak to projde bez problémů. URI i metoda požadavku jsou stejné a jsou v souboru uložené, zkontroloval jsem to. Failuje to jenom když chci záznam použít dvakrát.
Když nastavím betamax, aby HTTP GET opravdu prováděl, tak to projde bez problémů.
Nevíte o nějakém nastavení, co by tohle spravilo?
Ahoj, kdo děláte GitHub issues bot, mohli byste mi prosím vždy říct, kde je nějaký repositář, kde můžu zakládat issues, abych vyzkoušel, že váš deploy funguje? Naivně jsme si myslel, že vašeho bota pustím do svého repozitáře, ale chodí mu pozvánka e-mailem a bot nemá přístup, dokud tam nezakliknete Accept invite. Když už tedy vyžaduji akci od vás, bude pro mě jednodušší, když mě pustíte do repozitáře, na kterém jste to třeba sami zkoušeli.
Díky a omlouvám se za zmatky.
doplň do návodů python setup.py develop
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.