从快捷方式执行 python 会中断其导入

Executing python from a shortcut breaks its imports

我有一个项目,我自己制作了一些包。项目文件夹如下所示

Project
   - my_package
      __init__.py
      file1.py
      file2.py
   main.py

main.py 文件包含行 import my_package

init.py 文件在 my_package 中有这些行:

import sys
sys.path.insert(0, "my_package/")
from file1 import *
from file2 import *

如果我 cd 到 main.py 文件夹并 运行 它,它工作正常,但是如果我在我的桌面上创建一个快捷方式并尝试启动它,我得到这个错误:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
  File "/home/kolterdyx/.local/lib/python3.8/site-packages/PyInstaller/loader/pyimod03_importers.py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "my_package/__init__.py", line 3, in <module>
ModuleNotFoundError: No module named 'file1'
Traceback (most recent call last):
  File "main.py", line 6, in <module>
  File "/home/kolterdyx/.local/lib/python3.8/site-packages/PyInstaller/loader/pyimod03_importers.py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "my_package/__init__.py", line 3, in <module>
ModuleNotFoundError: No module named 'file2'

这是我的 shortcut/launcher:

[Desktop Entry]
Version=0.0.1
Type=Application
Terminal=false
Exec=/home/kolterdyx/VoidShips/Launcher  #Launcher is a python script compiled with PyInstaller
Name=VoidShips

我猜这是因为它试图在桌面上找到 file1.pyfile2.py,但由于它们不是,它会寻找 python 模块,但没有找到它们.

如何使用快捷方式并仍然从其自己的目录中创建程序 运行?

使用相对导入:

from .file1 import *
from .file2 import *

您可以参考 this 文章以获取更多信息。

我不知道您创建的 PyInstaller 启动器如何工作。但是,如果它在 cd 到 main.py 文件夹时对您有用,您可以使用快捷方式创建一个简单的 bash 脚本和 运行 bash 脚本。

示例:youlauncher.sh

cd /path/to/folder/of/mainpy
python main.py

我还建议使用相对导入 (from . import file1, file2)