アプリケーションを Mac に移植しようとしていますが、この問題の原因がわかりません。
ある時点で、ctypes を使用して、サードパーティが提供するいくつかの C++ ライブラリを読み込もうとしましたLoadLibrary
。Windows には dll があり、Mac には dylib があります。dylibs をロードするとエラーも発生しますが、これも解決しようとしていますが、ここでは問題にならないはずです。まさにそのための try/except ブロックがあるからです。
try:
self.log('Lib exists? %s: %s' % (libpath, os.path.exists(libpath)))
origdir = os.getcwd()
os.chdir(os.path.dirname(libpath))
self.lib = cdll.LoadLibrary(os.path.basename(libpath))
os.chdir(origdir)
self.log("Loaded Library!")
except Exception as e:
self.log('Error importing Library! %s' % e)
self.lib_loaded = False
問題はすべてログ ファイルに書き込まれます。問題は、最初の呼び出しでは何らかの形で機能するログ ファイルに追加されますが、上記のフラグメントで
self.log('Error importing Library! %s' % e)
.
log メソッドは非常に明白です。
def log(self, text):
if self.debug:
print text
with open('logfile.log', 'a') as w:
w.write('%s\n' % text)
Windows では、これは問題なく動作します。ライブラリが見つかると読み込まれ、見つからない場合は適切なメッセージが出力され、ログに書き込まれます。しかし、Macではエラーが発生します
Lib exists? /usr/local/lib/path/to/Mylib: True
Error importing Library! dlopen(lib.dylib, 6): no suitable image found. Did find:
lib.dylib: mach-o, but wrong architecture
/usr/local/lib/lib.dylib: mach-o, but wrong architecture
Traceback (most recent call last):
File "myapp.py", line 987, in <module>
foo = Foo(pyqtapp, splash)
File "myapp.py", line 83, in __init__
self.thelibLink = libLink.libLink(0.05, a, b)
File "libLink.py", line 100, in __init__
self.log('Error importing Library! %s' % e)
File "libLink.py", line 326, in log
with open(self.logfile, 'a') as w:
IOError: [Errno 13] Permission denied: 'logfile.log'
logfile.log
権限が-rw-r--r--
あり、私が所有しているため、これは私には意味がありません。さらに、プログラムを実行した後、ログファイルには次の内容が含まれます。
==Log of date/time==
Lib exists? /usr/local/lib/path/to/Mylib: True
だからどういうわけかself.log
、初めて呼び出されたときにファイルに追加する権限があります。これを解決する方法はありますか?