2017-07-12 2 views
1

Ich versuche, ein Python-Paket mit this tutorial zu erstellen. Dies ist die Ordnerstruktur:Python Packaging - NameError

testpackage\ 
     testpackage\ 
       __init__.py 
     setup.py 
     bin\ 
      test.sh 

setup.py

from setuptools import setup 

setup(name='testpackage', 
    version='0.1', 
    description='Test package', 
    url='http://github.com/storborg/testpackage', 
    author='ABcd', 
    author_email='[email protected]', 
    license='Private', 
    packages=['testpackage'], 
    scripts=['bin/test.sh'], 
    zip_safe=False) 

__init__.py

from subprocess import call 
import shlex 
def joke(): 
    call(shlex.split('bash bin/test.sh testfun')) 
    return (u'This is a sample package') 

test.sh

#!/bin/bash 

testfun() 
{ 
    echo "QQQQQQQQQQQQ" 
} 

"[email protected]" 

Ich habe den Befehl pip install . aus dem Stammordner testpackage ausgeführt und erfolgreich installiert. Dann habe ich aus demselben Ordner auf die Python-Eingabeaufforderung zugegriffen und die joke()-Funktion aufgerufen, sie wurde ausgeführt und die Textnachrichten ausgedruckt. Wenn ich auf die Python-Eingabeaufforderung von einem anderen Ordner aus zugreife und diese Funktion aufruft, wird ein NameError geworfen.

>>> import testpackage 
>>> testpackage.joke() 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/testpackage/__init__.py",  line 2, in joke 
call(shlex.split('bash test.sh testfun')) 
NameError: global name 'call' is not defined 

Warum das passiert? Irgendwelche Hinweise?

Antwort

1

Schließlich fand ich die Lösung.

Ich deinstallierte die testpackage mit sudo pip uninstall testpackage.

Dann installierte ich es wieder, sudo pip install .

Jedes Mal, wenn ich das Paket am ändern, ich deinstallieren und erneut das Paket installieren. Zuvor habe ich versucht, das Paket neu zu installieren, ohne es zu deinstallieren. Ich dachte, es wird aktualisiert, aber es war nicht.

Getestet, jetzt funktioniert gut.