从快捷方式执行 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.py
和 file2.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
)
我有一个项目,我自己制作了一些包。项目文件夹如下所示
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.py
和 file2.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
)