2016-03-23 21 views
0

İlk hiçbir modül adlı uygulaması, benim app klasörün sonrapiton İthalat hatası:

from flask import Flask 

app = Flask(__name__) 
from app import views 

ve __init__.py yarattı, ben

from app import app 

@app.route('/') 
@app.route('/index') 
def index(): 
    return "Hello, World! 

ve son olarak aynı uygulama klasöründe views.py yarattı, benim yarattığım Farklı bir klasörde run.py Farklı bir klasörde Ben run.py çalıştırmayı denediğinizde, bir hata alıyorum

/microblog 
    /app 
     /__init__.py 
     /views.py 
    /flask 
    /tmp 
     /run.py 

Ama

gibiyüzden, benim şişesi ağaç Senin sorunun farklar hakkında net bir bilgiye sahip olmamasıdır

Traceback (most recent call last): 
File "/home/shubham/Microblog/tmp/run.py", line 2, in <module> 
    from app import app 
ImportError: No module named app 
[Finished in 0.2s with exit code 1] 
[shell_cmd: python -u "/home/shubham/Microblog/tmp/run.py"] 
[dir: /home/shubham/Microblog/tmp] 
[path:  /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games] 
+2

'run.py' sözcüğünü 'microblog' altındaki' tmp''den kaldırmayı deneyin. Bence sadece bir "PYTHONPATH" meselesi; run.py, uygulama modülünüzü bulamıyor. –

+0

Lütfen metin düzenleyicinizi etiketlemeyin. Umrumda değil. – MattDMo

+0

#llja Denedim ama bana yeni bir hata veriyor, yani "AttributeError: 'module' nesnesi 'route' özelliğine sahip değil" şimdi ne yapabilirim? –

cevap

0

olduğunu ithalatlar, değişken isimler ve paketler arasında. Ve ithalat nasıl çalışır.

Python paketini yapılandırırken, genellikle üst düzey klasörünüzü setup.py, README ve diğer çeşitli dosyalar, ardından paket klasörünüz olacak. Eğer gerçekten sizin uygulamayla aynı yerde URL işleyicileri koymak istiyorum olmadıysa

├── microblog 
│   ├── __init__.py 
│   ├── server.py 
│   └── views.py 
├── README 
├── MANIFEST.in 
└── setup.py 

, bunun biraz geriye olsa var: Bu gibi görünen bir şey isteyebilirsiniz. Sen böyle yapmak gerekir:

server.py

from flask import Flask 
from . import views 

app = Flask(__name__) 
app.register_blueprint(views.microblog) 


def run(): 
    app.run(debug=True) 

views.py

from flask import Blueprint 

microblog = Blueprint('microblog', __name__) 

@microblog.route('/') 
@microblog.route('/index') 
def index(): 
    return 'Hello, world!' 

setup.py Şimdi

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from setuptools import setup 

setup(
    name='microblog', 
    version='0.1.0', 
    description='My microblog', 
    author='Me', 
    author_email='[email protected]', 
    url='http://my.cool.example.com', 
    packages=[ 
     'microblog', 
    ], 
    entry_points={ 
     'console_scripts': [ 
      'start-my-blog = microblog.server:run' 
     ], 
    }, 
    package_dir={'microblog': 'microblog'}, 
    include_package_data=True, 
    install_requires=['flask', 
    ], 
    license="BSD", 
    zip_safe=False, 
    keywords='', 
    classifiers=[ 
     'Development Status :: 2 - Pre-Alpha', 
     'Intended Audience :: Developers', 
     'License :: OSI Approved :: BSD License', 
     'Natural Language :: English', 
     'Programming Language :: Python :: 3.4', 
    ], 
) 

kendinize bir VIRTUALENV oluşturabilir, yüklemek Uygulamanızın ardından çalıştırın:

$ mkvirtualenv microblog 
$ workon microblog 
(microblog) $ python -m pip install -e . 
# a bunch of install happens here, flask & what-not 
$ start-my-blog 

Çalıştırılacak komutun adını değiştirmek isterseniz, bunu setup.py dosyasında gerçekleştirirsiniz. Böyle bir yapıyla başlamak, sizi yolun aşağısında bir sürü baş ağrısından kurtarır.

+0

Operasyonda isim çarpışması yok. Bu bir proje düzenlemenin güzel bir yolu olsa da, sorunun ne olduğu değil. – davidism

+0

Henüz. OP'nin hiç isim çarpışması yapamayacağından emin misiniz? (Belli ki?) Gelecekte ortaya çıkacak gibi görünüyor. –