ich eine verdrehte bin
Datei geschrieben haben, die auf /usr/bin
während der Anwendung deployement eingesetzt wird, basierend auf dem Axiom
Beispiel an anderer Stelle auf Stackoverflow (ich weiß nicht mehr wo), kann das Projekt found here sein.Twisted-Skript Ausgabe
Mein Problem ist, dass während des python setup.py install
Prozess, der installierte bin-Datei als die von Axiom-Paket unterscheidet:
/usr/bin/axiomatischen
#!/code/venv/bin/python
from axiom.scripts import axiomatic
axiomatic.main()
/usr/bin/myapp
#!/code/venv/bin/python
# EASY-INSTALL-DEV-SCRIPT: 'MyApp==0.0.1','myapp'
__requires__ = 'MyApp==0.0.1'
__import__('pkg_resources').require('MyApp==0.0.1')
exec(compile(open(__file__).read(), __file__, 'exec'))
und diese funktioniert nicht, wenn Aufruf aus der Bash-Shell: myapp start
ich die folgende Fehlermeldung erhalten: unknow command myapp
Wenn ich python setup.py develop
statt python setup.py install
alles funktioniert reibungslos verwenden.
Ich habe Setup eine kleine Test-Anwendung, die einen TCP-Dienst auf Port beginnt 1234:
- der Befehl
twistd finger
arbeitet, der Dienst gestartet werden - der Befehl
fingerize start
(verschiedene Namen absichtlich , um sicher nicht den falschen Anruf) funktioniert nicht
Hier ist der Code:
bin/fingerize
#!/usr/bin/python
from finger import tap
tap.main()
verdrillten/Plugins/finger_plugin.py
from twisted.application.service import ServiceMaker
Finger = ServiceMaker('Finger', 'finger.plugins', 'blah', 'finger')
Finger-/plugins.py
from twisted.application import internet
from twisted.internet import endpoints
from twisted.python import usage
from twisted.internet import protocol
class Options(usage.Options):
""" """
def makeService(options):
from twisted.internet import reactor
endpoint = endpoints.TCP4ServerEndpoint(reactor, 1234)
return internet.StreamServerEndpointService(
endpoint,
protocol.Factory())
Finger/tap.py
import sys
from twisted.python import usage
from twisted.scripts import twistd
class Start(twistd.ServerOptions):
run = staticmethod(twistd.run)
def subCommands(self):
raise AttributeError()
subCommands = property(subCommands)
def parseOptions(self, args):
print(sys.argv)
print(args)
a = self.getArguments(args)
print(a)
sys.argv[1:] = a
print(sys.argv)
print('Starting finger service...')
self.run()
def getArguments(self, args):
args.extend(['--pidfile', self.parent.pid()])
args.extend(['finger'])
return args
class Options(usage.Options):
def subCommands():
def get(self):
yield ('start', None, Start, 'Launch finger service')
return get,
subCommands = property(*subCommands())
def pid(self):
return '/tmp/finger.pid'
def main(argv=None):
o = Options()
try:
o.parseOptions(argv)
except usage.UsageError, e:
raise SystemExit(str(e))
Setup.py
from setuptools import find_packages
from setuptools import setup
METADATA = dict(
name='Finger',
version='0.0.1',
packages=find_packages(),
scripts=['bin/fingerize'],
install_requires=[
'Twisted >= 15.5.0',
],
include_package_data=True,
zip_safe=False,
)
setup(**METADATA)
Und wenn ich fingerize start
nenne ich bekommen: /code/test/bin/fingerize: Unknown command: finger
(Test ist ein virtualenv)
Das Problem ist mit Ihrem 'setup.py', das Sie nicht enthalten haben. – Glyph
ups Tut mir leid, ich füge es jetzt hinzu, es ist tief inspiriert von 'Twisted' one – kitensei
Die' txmyapp.python.dist' ist irrelevant, die 'verifyInstall() 'Funktion sucht nur nach Ordnern und' raise IOError' falls nicht gefunden. – kitensei