我使用以下代码行来连接到我的计算机的数据库实例。
cnx = mysql.connector.connect(host=Host, user=User, password=Password, database=db, auth_plugin='mysql_native_password')
Run Code Online (Sandbox Code Playgroud)
该连接在 spyder 控制台和我根据此代码制作的可执行文件 (.exe) 上都可以完美运行。问题是,当我尝试从另一台计算机远程运行此可执行文件并连接到我计算机的数据库实例(我的 IP)时,我收到此身份验证插件错误。我应该对 mysql 数据库的设置进行一些更改吗?我需要代码既可以在我的 PC 上本地运行,也可以在其他任何地方远程运行。
我曾经在一个 IntelliJ 项目上工作,这个项目在我开始工作之前就已经开始了。这个项目有一个配置,允许我生成一个可以轻松发送给 Windows 用户的 EXE 文件。
它会生成一个与应用程序所有需要的 JAR 捆绑在一起的大量 EXE 文件,并且在第一次运行它时,它会默默地将自己“安装”到 AppData 文件夹中,就好像它是一个常规的 Windows 安装文件,即使用户甚至不会注意到它在安装。
我正在尝试在 IntelliJ 中配置一个项目以执行完全相同的操作,但首先我无法通过选择“exe”作为 Java FX 本机包类型来输出 exe 文件。它只生成一个 .jnlp 和 .jar 文件。当我选择“全部”时,根据 stackoverflow 中的其他一些帖子,它会生成一个 exe 文件,但只有几 kb 的大小,其中不包含任何应该成为其中一部分的 .jar 文件。此外,当我尝试打开它时,它只是崩溃,说找不到主类。
我是否缺少构建项目的一些设置?我正在使用 IntelliJ 2018.3.2
以下是一些截图:
我在 python 脚本中有一个应用程序,my_app.py想在 MacOS (10.14) 上制作一个独立的可执行文件。按照此处的视频教程,我依次输入了以下命令:
pip install virtualenv
virtualenv venv --system-site-packages
source venv/bin/activate
pip install py2app
cd /path/to/my_app.py
python setup.py py2app -A
Run Code Online (Sandbox Code Playgroud)
使用以下setup.py文件:
from setuptools import setup
APP = ["my_app.py"]
DATA_FILES = []
OPTIONS = {
"argv_emulation": True,
"packages": ["certifi"],
}
setup(
app = APP,
data_files = DATA_FILES,
options = {"py2app": OPTIONS},
setup_requires = ["py2app"]
)
Run Code Online (Sandbox Code Playgroud)
但收到以下错误消息:
Traceback (most recent call last):
File "setup.py", line 13, in <module>
setup_requires = ["py2app"]
File "/Users/mymac/venv/lib/python3.7/site-packages/setuptools/__init__.py", …Run Code Online (Sandbox Code Playgroud) 假设一个简单的 hello world in C,编译gcc -c为目标文件并反汇编为objdump如下所示:
_main:
0: 55 pushq %rbp
1: 48 89 e5 movq %rsp, %rbp
4: c7 45 fc 00 00 00 00 movl $0, -4(%rbp)
b: c7 45 f8 05 00 00 00 movl $5, -8(%rbp)
12: 8b 05 00 00 00 00 movl (%rip), %eax
Run Code Online (Sandbox Code Playgroud)
如您所见,内存地址是0, 1, 4, ..等等。它们不是实际地址。
链接目标文件并反汇编它看起来像这样:
_main:
100000f90: 55 pushq %rbp
100000f91: 48 89 e5 movq %rsp, %rbp
100000f94: c7 45 fc 00 00 …Run Code Online (Sandbox Code Playgroud) 我使用Stack 工具创建了一个 Haskell CLI 。感谢 Travis,我刚刚成功设置了交叉编译,但我不明白为什么 linux (6MB)、osx (2MB) 和 windows (18MB!) 之间的可执行文件大小如此不同。怎么来的?
发布:https : //github.com/unfog-io/unfog-cli/releases/tag/v0.1.2
特拉维斯 conf:https : //github.com/unfog-io/unfog-cli/blob/master/.travis.yml
编辑
当我用 tar.gz 压缩可执行文件时,我减少了差异,但仍然如此!我现在有 linux (1.35MB)、osx (0.61MB)、windows (3.93MB)(见发布)
我已经尝试这样做了一段时间。我按照教程说你应该先安装pyinstaller。所以,我安装了它。然后它说你应该用pyinstaller --onefile -w file_name.pycmd写。我也有这个问题(有一个错误)。所以,我安装了另一个版本的 pyinstaller。我写了同样的东西,但没有创建 .exe 文件,只有一个名为“ pycache ”的新文件夹,里面有一个新的 .pyc 文件(我想这是我想变成 .exe 的文件版本)。然后我尝试安装 cx freeze 但 pip 不会安装它。
我不知道最好的方法是什么,也许你们中的一个人已经尝试过这样做?
编辑 - 这是我在 cmd 中写的内容以及它所说的内容:
K:\>pyinstaller --onefile -w K:\geut_project\client_nuovo.py
74 INFO: PyInstaller: 4.0.dev0+9dd34bdfba
74 INFO: Python: 3.8.0
74 INFO: Platform: Windows-10-10.0.17134-SP0
250 INFO: wrote K:\client_nuovo.spec
252 INFO: UPX is not available.
261 INFO: Extending PYTHONPATH with paths
['K:\\geut_project', 'K:\\']
261 INFO: checking Analysis
312 INFO: checking PYZ
364 INFO: checking PKG
380 INFO: Building because K:\build\client_nuovo\client_nuovo.exe.manifest changed …Run Code Online (Sandbox Code Playgroud) 我想创建一个独立的应用程序,它可以在我的以外的其他 Mac 上全局使用。
我遵循了这个页面的教程:https : //www.metachris.com/2015/11/create-standalone-mac-os-x-applications-with-python-and-py2app/
但是,在构建部署步骤完成后,我想通过双击在 dist 文件夹中运行该应用程序,我收到此错误消息:
"*MYAPP* has encountered a fatal error, and will not terminate.
A Python runtime not could be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this application's Info.plist file"
Run Code Online (Sandbox Code Playgroud)
--> 我假设我必须在我的虚拟环境中安装 Python。此外,我知道为了解决这个问题,也许我必须使用“Macports”。我通过关注和阅读此线程并关注问题根源来了解这一点:py2app is not copy the Python.framework to the new app while using virutalenv
但即使阅读后我也不明白:
--> 如何在我的虚拟环境中安装 Python 以便为 Mac 创建独立的可执行应用程序。
当我在终端中执行它时,我的 Python 脚本运行得很好,而且我没有为这个小应用程序使用任何包,所以不应该有来自其他包的任何依赖项。
希望有人可以提供帮助。
谢谢!
---编辑--- 这是我的 setup.py 文件:
""" …Run Code Online (Sandbox Code Playgroud) 我正在创建一个应该修改自身并且是可移植的 python 脚本。
我可以单独实现这些目标中的每一个,但不能一起实现。
我使用 cx_freeze 或 pyinstaller 将我的 .py 打包为 exe,因此它是可移植的;但后来我有很多 .pyc 编译文件,我无法从软件本身编辑我的 .py 文件。
有没有办法让脚本保持便携和轻量级(所以 70mb 的便携 python 环境不是一种选择)但仍然可以编辑?
这个想法是有一种像 python.exe 这样的 exe“解释器”,但是所有的库都链接起来,因为 pyinstaller 允许,运行 .py 文件,所以 .py 脚本可以编辑自己或被其他脚本编辑,并且仍然与解释器一起执行。
据我了解:
CPU 上有一个内存管理单元,用于控制对实际内存的访问。任何内存调用都流经这个单元,它将虚拟地址转换为实际内存地址。这允许计算机在 64 位机器上拥有 2^64 字节的虚拟内存空间。当没有足够的 RAM 时,CPU 或 MMU 会在需要时从磁盘交换页面进出。
Linux 上的 ELF 二进制文件包含一个标头,其中列出了二进制文件中二进制文件部分的地址(以及其他信息),其中包括代码部分和数据部分等。
ELF 标头还指定需要哪些共享库。它们由内核存储在内存中,当执行二进制文件时,它们的地址由内核提供给进程。
所以我更具体的问题是,作为 ASLR 的一部分,二进制文件和堆和堆栈的所有部分是否都从基位置随机偏移?
(对不起,如果其中任何一个是非常错误的,我在汇编/C/C++ 编程方面不是很有经验,并试图弄清楚二进制可执行文件如何工作的较小细节。)
我正在编译一个简单的汇编代码(Intel 语法、x86、Linux)打印“Hello World!”。这里是:
SECTION .rodata
msg: db 'Hello world!', 0xA
msg_len: equ $ - msg
SECTION .text
global _start
_start:
mov eax, 4 ; `write` system call
mov ebx, 1 ; to stdout
mov ecx, msg
mov edx, msg_len
int 0x80
mov eax, 1 ; `exit` system call
xor ebx, ebx ; exit code 0
int 0x80
Run Code Online (Sandbox Code Playgroud)
我使用以下命令编译它:
SECTION .rodata
msg: db 'Hello world!', 0xA
msg_len: equ $ - msg
SECTION .text
global _start
_start:
mov eax, 4 ; …Run Code Online (Sandbox Code Playgroud) executable ×10
python ×5
linux ×2
macos ×2
py2app ×2
pyinstaller ×2
aslr ×1
assembly ×1
cx-freeze ×1
elf ×1
haskell ×1
java ×1
javafx ×1
linker ×1
linux-kernel ×1
mysql ×1
mysql-python ×1
python-3.8 ×1
python-3.x ×1
travis-ci ×1
virtualenv ×1